Hi Tobias,
Thank you for the review! The original format was affected by the
email content. The newly attached patch removes the unnecessary {} and
reformats it.
Hi Jerry,
I re-ran the test suite and indeed found a case that needed
modification. I've added that to the new patch. Will be great if you
can help me double check the updated patch.
Yuao
From 89e9786d56423c7f3693b9c6b28d2d3918074f82 Mon Sep 17 00:00:00 2001
From: Yuao Ma <[email protected]>
Date: Tue, 28 Oct 2025 01:58:39 +0800
Subject: [PATCH] fortran: revise non-char pointer handling in
gfc_conv_constant
PR fortran/122342
gcc/fortran/ChangeLog:
* trans-const.cc (gfc_conv_constant): Create a variable for the
non-char pointer.
gcc/testsuite/ChangeLog:
* gfortran.dg/coarray_atomic_5.f90: Update testcase.
* gfortran.dg/team_form_3.f90: Likewise.
---
gcc/fortran/trans-const.cc | 4 +++-
gcc/testsuite/gfortran.dg/coarray_atomic_5.f90 | 4 ++--
gcc/testsuite/gfortran.dg/team_form_3.f90 | 6 +++---
3 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/gcc/fortran/trans-const.cc b/gcc/fortran/trans-const.cc
index f70f36284a3..b1bf5671e08 100644
--- a/gcc/fortran/trans-const.cc
+++ b/gcc/fortran/trans-const.cc
@@ -444,6 +444,8 @@ gfc_conv_constant (gfc_se * se, gfc_expr * expr)
if (expr->ts.type == BT_CHARACTER)
gfc_conv_string_parameter (se);
else
- se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
+ se->expr
+ = gfc_build_addr_expr (NULL_TREE,
+ gfc_trans_force_lval (&se->pre, se->expr));
}
}
diff --git a/gcc/testsuite/gfortran.dg/coarray_atomic_5.f90
b/gcc/testsuite/gfortran.dg/coarray_atomic_5.f90
index 70c3d2ff4eb..8ddfa8df27c 100644
--- a/gcc/testsuite/gfortran.dg/coarray_atomic_5.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_atomic_5.f90
@@ -19,7 +19,7 @@ program atomic
write(*,*) me
end program
-! { dg-final { scan-tree-dump-times "value.. = 0;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "_gfortran_caf_atomic_define
\\(caf_token.., 0, 1, &value.., 0B, 1, 4\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "D\\.\[0-9\]+ = 0;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "_gfortran_caf_atomic_define
\\(caf_token.., 0, 1, &D\\.\[0-9\]+, 0B, 1, 4\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_atomic_op \\(1,
caf_token.., 0, 1, &me, 0B, 0B, 1, 4\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_atomic_ref \\(caf_token..,
0, 1, &me, 0B, 1, 4\\);" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/team_form_3.f90
b/gcc/testsuite/gfortran.dg/team_form_3.f90
index d9aae3376ea..13eb0c09995 100644
--- a/gcc/testsuite/gfortran.dg/team_form_3.f90
+++ b/gcc/testsuite/gfortran.dg/team_form_3.f90
@@ -29,6 +29,6 @@ end
! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, 0B,
0B, 0B, 0\\)" "original" } }
! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, 0B,
&istat, 0B, 0\\)" "original" } }
! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, 0B,
&istat, &err, 30\\)" "original" } }
-! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team,
&C\\.\[0-9\]+, 0B, 0B, 0\\)" "original" } }
-! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team,
&C\\.\[0-9\]+, &istat, 0B, 0\\)" "original" } }
-! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team,
&C\\.\[0-9\]+, &istat, &err, 30\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team,
&D\\.\[0-9\]+, 0B, 0B, 0\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team,
&D\\.\[0-9\]+, &istat, 0B, 0\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team,
&D\\.\[0-9\]+, &istat, &err, 30\\)" "original" } }
--
2.43.0