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