https://gcc.gnu.org/g:f4efb9f8aea997bc7ca88a86bcc968c3266a5d49

commit f4efb9f8aea997bc7ca88a86bcc968c3266a5d49
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Tue Dec 10 21:27:51 2024 +0100

    Initialisation vptr

Diff:
---
 gcc/fortran/trans-array.cc | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index ad1e317026af..c82eedcaf025 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -767,7 +767,16 @@ gfc_build_default_class_descriptor (tree type, 
gfc_typespec &ts)
   CONSTRUCTOR_APPEND_ELT (v, data_field, data_value);
 
   tree vptr_field = gfc_advance_chain (fields, CLASS_VPTR_FIELD);
-  tree vptr_value = fold_convert (TREE_TYPE (vptr_field), null_pointer_node);
+
+  tree vptr_value;
+  if (ts.u.derived->attr.unlimited_polymorphic)
+    vptr_value = fold_convert (TREE_TYPE (vptr_field), null_pointer_node);
+  else
+    {
+      gfc_symbol *vsym = gfc_find_derived_vtab (ts.u.derived);
+      tree vsym_decl = gfc_get_symbol_decl (vsym);
+      vptr_value = gfc_build_addr_expr (nullptr, vsym_decl);
+    }
   CONSTRUCTOR_APPEND_ELT (v, vptr_field, vptr_value);
 
 #undef CLASS_DATA_FIELD

Reply via email to