diff options
author | José Rui Faustino de Sousa <jrfsousa@gmail.com> | 2022-10-18 22:29:59 +0200 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2022-10-21 20:17:43 +0200 |
commit | 4cfdaeb2755121ac1069f09898def56469b0fb51 (patch) | |
tree | f99a46e71c1126e3092037e4b8ae23eea8d46c17 /gcc/fortran/trans-decl.cc | |
parent | 5792208f5124f687376f25798668d105d7ddb270 (diff) | |
download | gcc-4cfdaeb2755121ac1069f09898def56469b0fb51.zip gcc-4cfdaeb2755121ac1069f09898def56469b0fb51.tar.gz gcc-4cfdaeb2755121ac1069f09898def56469b0fb51.tar.bz2 |
Fortran: Add missing TKR initialization to class variables [PR100097, PR100098]
gcc/fortran/ChangeLog:
PR fortran/100097
PR fortran/100098
* trans-array.cc (gfc_trans_class_array): New function to
initialize class descriptor's TKR information.
* trans-array.h (gfc_trans_class_array): Add function prototype.
* trans-decl.cc (gfc_trans_deferred_vars): Add calls to the new
function for both pointers and allocatables.
gcc/testsuite/ChangeLog:
PR fortran/100097
PR fortran/100098
* gfortran.dg/PR100097.f90: New test.
* gfortran.dg/PR100098.f90: New test.
Diffstat (limited to 'gcc/fortran/trans-decl.cc')
-rw-r--r-- | gcc/fortran/trans-decl.cc | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index 4b570c3..63515b9 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -4835,7 +4835,7 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block) else if ((!sym->attr.dummy || sym->ts.deferred) && (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->attr.class_pointer)) - continue; + gfc_trans_class_array (sym, block); else if ((!sym->attr.dummy || sym->ts.deferred) && (sym->attr.allocatable || (sym->attr.pointer && sym->attr.result) @@ -4919,6 +4919,10 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block) tmp = NULL_TREE; } + /* Initialize descriptor's TKR information. */ + if (sym->ts.type == BT_CLASS) + gfc_trans_class_array (sym, block); + /* Deallocate when leaving the scope. Nullifying is not needed. */ if (!sym->attr.result && !sym->attr.dummy && !sym->attr.pointer |