aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorAndre Vehreschild <vehre@gcc.gnu.org>2025-03-05 15:18:48 +0100
committerAndre Vehreschild <vehre@gcc.gnu.org>2025-03-10 13:21:10 +0100
commitf2339cefd6985e20014f9b0795fb651a96788246 (patch)
tree267da8999f974709ba7f334f19b09a9487f80345 /gcc/fortran
parent21109b37e8585a7a1b27650fcbf1749380016108 (diff)
downloadgcc-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.cc3
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)