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; }