https://gcc.gnu.org/g:9439e1aeaa0abf0de5ca6c9d3b46c2d2f5dd4b6f

commit 9439e1aeaa0abf0de5ca6c9d3b46c2d2f5dd4b6f
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Tue Mar 11 12:17:15 2025 +0100

    Correction régression dynamic_dispatch_11.f03
    
    Resolve class symbol type.

Diff:
---
 gcc/fortran/gfortran.h     | 1 +
 gcc/fortran/resolve.cc     | 7 +++++++
 gcc/fortran/trans-types.cc | 2 ++
 3 files changed, 10 insertions(+)

diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 052f884f3ea4..29ad015f0d10 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -3485,6 +3485,7 @@ void gfc_maybe_initialize_eh (void);
 /* iresolve.cc */
 const char * gfc_get_string (const char *, ...) ATTRIBUTE_PRINTF_1;
 bool gfc_find_sym_in_expr (gfc_symbol *, gfc_expr *);
+void gfc_resolve_symbol (gfc_symbol *);
 
 /* error.cc */
 locus gfc_get_location_range (locus *, unsigned, locus *, unsigned, locus *);
diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index 2c8fb78ca6a9..5fcfc2c83b7d 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -18525,6 +18525,13 @@ skip_interfaces:
 }
 
 
+void
+gfc_resolve_symbol (gfc_symbol *sym)
+{
+  resolve_symbol (sym);
+}
+
+
 /************* Resolve DATA statements *************/
 
 static struct
diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc
index 2a1ab3c6ef58..6b8dbf1225aa 100644
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -2865,6 +2865,8 @@ get_class_canonical_type (gfc_symbol *derived, int rank, 
int corank)
   gfc_build_class_symbol (&ts, &attr, &pas);
 
   gfc_find_symbol (class_name, ns, 0, &canonical_class);
+  if (canonical_class)
+    gfc_resolve_symbol (canonical_class);
 
   return canonical_class;
 }

Reply via email to