diff options
author | Andre Vehreschild <vehre@gcc.gnu.org> | 2025-03-05 15:18:48 +0100 |
---|---|---|
committer | Andre Vehreschild <vehre@gcc.gnu.org> | 2025-03-10 13:21:10 +0100 |
commit | f2339cefd6985e20014f9b0795fb651a96788246 (patch) | |
tree | 267da8999f974709ba7f334f19b09a9487f80345 /gcc/fortran | |
parent | 21109b37e8585a7a1b27650fcbf1749380016108 (diff) | |
download | gcc-f2339cefd6985e20014f9b0795fb651a96788246.zip gcc-f2339cefd6985e20014f9b0795fb651a96788246.tar.gz gcc-f2339cefd6985e20014f9b0795fb651a96788246.tar.bz2 |
Fortran: Fix gimplification error for pointer remapping in forall [PR107143]
Enhance dependency checking for data pointers to check for same derived
type and not only for a type being a derived type. This prevent
generation of a descriptor for a function call, that is unsuitable in
forall's pointer assignment.
PR fortran/107143
gcc/fortran/ChangeLog:
* dependency.cc (check_data_pointer_types): Do not just compare
for derived type, but for same derived type.
gcc/testsuite/ChangeLog:
* gfortran.dg/forall_20.f90: New test.
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/dependency.cc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/fortran/dependency.cc b/gcc/fortran/dependency.cc index 8354b18..28b872f 100644 --- a/gcc/fortran/dependency.cc +++ b/gcc/fortran/dependency.cc @@ -1250,7 +1250,8 @@ check_data_pointer_types (gfc_expr *expr1, gfc_expr *expr2) sym2 = expr2->symtree->n.sym; /* Keep it simple for now. */ - if (sym1->ts.type == BT_DERIVED && sym2->ts.type == BT_DERIVED) + if (sym1->ts.type == BT_DERIVED && sym2->ts.type == BT_DERIVED + && sym1->ts.u.derived == sym2->ts.u.derived) return false; if (sym1->attr.pointer) |