https://gcc.gnu.org/g:b6146faae09bbc936d280abb215c30d699b0c1d1

commit r16-4695-gb6146faae09bbc936d280abb215c30d699b0c1d1
Author: Yuao Ma <[email protected]>
Date:   Tue Oct 28 01:58:39 2025 +0800

    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.

Diff:
---
 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 f70f36284a38..b1bf5671e080 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 70c3d2ff4eb6..8ddfa8df27c6 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 d9aae3376ead..13eb0c099954 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" } }

Reply via email to