https://gcc.gnu.org/g:3771355a32fe4f93966e8ade0da56d991bb3f9f3

commit 3771355a32fe4f93966e8ade0da56d991bb3f9f3
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Tue Mar 11 15:21:14 2025 +0100

    Correction dynamic_dispatch_6.f03

Diff:
---
 gcc/fortran/trans-types.cc | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc
index 9c765feca482..0d7bab924571 100644
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -2871,7 +2871,11 @@ get_class_canonical_type (gfc_symbol *derived, int rank, 
int corank)
 
   gfc_find_symbol (class_name, ns, 0, &canonical_class);
   if (canonical_class)
-    gfc_resolve_symbol (canonical_class);
+    {
+      if (derived->module)
+       canonical_class->module = gfc_get_string ("%s", derived->module);
+      gfc_resolve_symbol (canonical_class);
+    }
 
   return canonical_class;
 }
@@ -3244,7 +3248,10 @@ gfc_get_derived_type (gfc_symbol * derived, int codimen)
     {
       gfc_symbol * canonical_sym = get_class_canonical_type (derived);
       if (canonical_sym != nullptr)
-       TYPE_CANONICAL (typenode) = gfc_get_derived_type (canonical_sym, 
codimen);
+       {
+         tree canonical_sym_decl = gfc_get_derived_type (canonical_sym, 
codimen);
+         TYPE_CANONICAL (typenode) = TYPE_CANONICAL (canonical_sym_decl);
+       }
       gfc_component * data_comp = derived->components;
       gfc_symbol *orig_type = data_comp->ts.u.derived;
       if (orig_type->attr.extension)

Reply via email to