[gcc(refs/users/mikael/heads/refactor_descriptor_v203.06)] fortran: array descriptor: Wrap getter results in a non_lvalue [PR122521]

Mikael Morin via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:7c9df856c40b435180afea4a7422b086a379c5d2

commit 7c9df856c40b435180afea4a7422b086a379c5d2
Author: Mikael Morin <[email protected]>
Date:   Thu Oct 23 12:29:18 2025 +0200

    fortran: array descriptor: Wrap getter results in a non_lvalue [PR122521]
    
    Regression tested on powerpc64le-unknown-linux-gnu.
    
    -- >8 --
    
    Before this change, the getter functions giving access to the individual
    fields of array descriptors return a bare reference to the field.  This
    makes it possible to overuse the result of the getter by assigning a value
    to it.
    
    This change makes that overuse invalid by wrapping the value returned by
    each getter in a non_lvalue expression.  This alone doesn't forbid the usage
    of the value on the left side of an assignment, because the non_lvalue is
    unwrapped by gimplification.  A follow-up change will reject the case before
    that unwrapping happens.
    
    There is an exception for the data getter which is not modified here.  The
    data getter is special because it returns a conversion of the field
    reference instead of the reference itself, so that it's already not an
    lvalue, and the creation of a non_lvalue around it is immediately folded
    away.
    
    This change requires the dump patterns of the testsuite to allow an optional
    NON_LVALUE_EXPR <...> wrapping, wich causes some churn.  To compensate a bit
    the additional verbosity, brace quotes are used, which reduces the number of
    escape characters.
    
            PR fortran/122521
    
    gcc/fortran/ChangeLog:
    
            * trans-descriptor.cc (gfc_conv_descriptor_offset_get,
            gfc_conv_descriptor_dtype_get, gfc_conv_descriptor_span_get,
            gfc_conv_descriptor_rank_get, gfc_conv_descriptor_version_get,
            gfc_conv_descriptor_elem_len_get, gfc_conv_descriptor_type_get,
            gfc_conv_descriptor_dimension_get, gfc_conv_descriptor_stride_get,
            gfc_conv_descriptor_lbound_get, gfc_conv_descriptor_ubound_get):
            Wrap the result in a non_lvalue.
    
    libgomp/ChangeLog:
    
            * testsuite/libgomp.fortran/allocators-1.f90: In the tree dump
            patterns, use brace quotes and allow an optional NON_LVALUE_EXPR
            wrapper around array descriptor field references.
    
    gcc/testsuite/ChangeLog:
    
            * gfortran.dg/PR93963.f90: In the tree dump patterns, use brace
            quotes and allow an optional NON_LVALUE_EXPR wrapper around array
            descriptor field references.
            * gfortran.dg/array_reference_3.f90: Likewise.
            * gfortran.dg/bind-c-contiguous-2.f90: Likewise.
            * gfortran.dg/bind_c_array_params_2.f90: Likewise.
            * gfortran.dg/coarray_lib_this_image_1.f90: Likewise.
            * gfortran.dg/coarray_lib_this_image_2.f90: Likewise.
            * gfortran.dg/coarray_lock_7.f90: Likewise.
            * gfortran.dg/contiguous_3.f90: Likewise.
            * gfortran.dg/intrinsic_size_3.f90: Likewise.
            * gfortran.dg/gomp/depend-4.f90: Likewise.
            * gfortran.dg/gomp/depend-5.f90: Likewise.
            * gfortran.dg/gomp/depend-6.f90: Likewise.

Diff:
---
 gcc/fortran/trans-descriptor.cc                    | 20 ++++++++---------
 gcc/testsuite/gfortran.dg/PR93963.f90              |  2 +-
 gcc/testsuite/gfortran.dg/array_reference_3.f90    | 10 ++++-----
 gcc/testsuite/gfortran.dg/bind-c-contiguous-2.f90  | 12 +++++------
 .../gfortran.dg/bind_c_array_params_2.f90          |  4 ++--
 .../gfortran.dg/coarray_lib_this_image_1.f90       |  2 +-
 .../gfortran.dg/coarray_lib_this_image_2.f90       |  2 +-
 gcc/testsuite/gfortran.dg/coarray_lock_7.f90       | 12 +++++------
 gcc/testsuite/gfortran.dg/contiguous_3.f90         |  4 ++--
 gcc/testsuite/gfortran.dg/gomp/depend-4.f90        | 24 ++++++++++-----------
 gcc/testsuite/gfortran.dg/gomp/depend-5.f90        | 12 +++++------
 gcc/testsuite/gfortran.dg/gomp/depend-6.f90        | 25 +++++++++++-----------
 gcc/testsuite/gfortran.dg/intrinsic_size_3.f90     |  2 +-
 libgomp/testsuite/libgomp.fortran/allocators-1.f90 |  4 ++--
 14 files changed, 68 insertions(+), 67 deletions(-)

diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index 6156f4e2db1e..8103a080ccb8 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -136,7 +136,7 @@ conv_descriptor_offset (tree desc)
 tree
 gfc_conv_descriptor_offset_get (tree desc)
 {
-  return conv_descriptor_offset (desc);
+  return non_lvalue_loc (input_location, conv_descriptor_offset (desc));
 }
 
 /* Add code to BLOCK assigning VALUE to the offset field of the array descriptor
@@ -165,7 +165,7 @@ conv_descriptor_dtype (tree desc)
 tree
 gfc_conv_descriptor_dtype_get (tree desc)
 {
-  return conv_descriptor_dtype (desc);
+  return non_lvalue_loc (input_location, conv_descriptor_dtype (desc));
 }
 
 /* Add code to BLOCK assigning VALUE to the dtype field of the array descriptor
@@ -196,7 +196,7 @@ conv_descriptor_span (tree desc)
 tree
 gfc_conv_descriptor_span_get (tree desc)
 {
-  return conv_descriptor_span (desc);
+  return non_lvalue_loc (input_location, conv_descriptor_span (desc));
 }
 
 /* Add code to BLOCK assigning VALUE to the span field of the array descriptor
@@ -231,7 +231,7 @@ conv_descriptor_rank (tree desc)
 tree
 gfc_conv_descriptor_rank_get (tree desc)
 {
-  return conv_descriptor_rank (desc);
+  return non_lvalue_loc (input_location, conv_descriptor_rank (desc));
 }
 
 /* Add code to BLOCK assigning VALUE to the rank field of the array descriptor
@@ -278,7 +278,7 @@ conv_descriptor_version (tree desc)
 tree
 gfc_conv_descriptor_version_get (tree desc)
 {
-  return conv_descriptor_version (desc);
+  return non_lvalue_loc (input_location, conv_descriptor_version (desc));
 }
 
 /* Add code to BLOCK assigning VALUE to the format version field of the array
@@ -317,7 +317,7 @@ conv_descriptor_elem_len (tree desc)
 tree
 gfc_conv_descriptor_elem_len_get (tree desc)
 {
-  return conv_descriptor_elem_len (desc);
+  return non_lvalue_loc (input_location, conv_descriptor_elem_len (desc));
 }
 
 /* Add code to BLOCK assigning VALUE to the element length field of the array
@@ -355,7 +355,7 @@ conv_descriptor_type (tree desc)
 tree
 gfc_conv_descriptor_type_get (tree desc)
 {
-  return conv_descriptor_type (desc);
+  return non_lvalue_loc (input_location, conv_descriptor_type (desc));
 }
 
 /* Add code to BLOCK assigning VALUE to the type discriminator field of the
@@ -510,7 +510,7 @@ gfc_conv_descriptor_stride_get (tree desc, tree dim)
 	  || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER_CONT))
     return gfc_index_one_node;
 
-  return conv_descriptor_stride (desc, dim);
+  return non_lvalue_loc (input_location, conv_descriptor_stride (desc, dim));
 }
 
 /* Add code to BLOCK assigning VALUE to the stride field of the (zero-based)
@@ -542,7 +542,7 @@ conv_descriptor_lbound (tree desc, tree dim)
 tree
 gfc_conv_descriptor_lbound_get (tree desc, tree dim)
 {
-  return conv_descriptor_lbound (desc, dim);
+  return non_lvalue_loc (input_location, conv_descriptor_lbound (desc, dim));
 }
 
 /* Add code to BLOCK assigning VALUE to the lower bound field of the
@@ -574,7 +574,7 @@ conv_descriptor_ubound (tree desc, tree dim)
 tree
 gfc_conv_descriptor_ubound_get (tree desc, tree dim)
 {
-  return conv_descriptor_ubound (desc, dim);
+  return non_lvalue_loc (input_location, conv_descriptor_ubound (desc, dim));
 }
 
 /* Add code to BLOCK assigning VALUE to the upper bound field of the
diff --git a/gcc/testsuite/gfortran.dg/PR93963.f90 b/gcc/testsuite/gfortran.dg/PR93963.f90
index 6769d7fe0610..22092b224124 100644
--- a/gcc/testsuite/gfortran.dg/PR93963.f90
+++ b/gcc/testsuite/gfortran.dg/PR93963.f90
@@ -194,4 +194,4 @@ end program selr_p
 
 ! Special code for assumed rank - but only if not allocatable/pointer
 ! Thus, expect it only once for subroutine rank_o but not for rank_a or rank_p
-! { dg-final { scan-tree-dump-times "ubound != -1" 1 "original" } }
+! { dg-final { scan-tree-dump-times {(?:NON_LVALUE_EXPR <)?ubound>? != -1} 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/array_reference_3.f90 b/gcc/testsuite/gfortran.dg/array_reference_3.f90
index 85fa3317d985..9a0093e82eb1 100644
--- a/gcc/testsuite/gfortran.dg/array_reference_3.f90
+++ b/gcc/testsuite/gfortran.dg/array_reference_3.f90
@@ -65,7 +65,7 @@ contains
     call ccfis(x)
     if (any(x /= 13)) stop 13
     ! The cfi descriptor’s dim array is referenced with array indexing.
-    ! { dg-final { scan-tree-dump-times "cfi_descriptor->dim\\\[idx.\\d+\\\]\\.ubound = _cfi_descriptor->dim\\\[idx.\\d+\\\]\\.extent \\+ \\(cfi_descriptor->dim\\\[idx.\\d+\\\]\\.lbound \\+ -1\\);" 1 "original" } }
+    ! { dg-final { scan-tree-dump-times {cfi_descriptor->dim\[idx.\d+\]\.ubound = _cfi_descriptor->dim\[idx.\d+\]\.extent \+ \((?:NON_LVALUE_EXPR <)?cfi_descriptor->dim\[idx.\d+\]\.lbound>? \+ -1\);} 1 "original" } }
   end subroutine check_cfi_dim
   subroutine css(c) bind(c)
     character :: c
@@ -87,7 +87,7 @@ contains
     ptr_x(4) = 16
     if (any(ptr_x /= (/ 0, 0, 0, 16, 0, 0, 0 /))) stop 16
     ! pointers are referenced with pointer arithmetic.
-    ! { dg-final { scan-tree-dump-times "\\*\\(integer\\(kind=4\\) \\*\\) \\(ptr_x\\.data \\+ \\(sizetype\\) \\(\\(ptr_x\\.offset \\+ ptr_x\\.dim\\\[0\\\]\\.stride \\* 4\\) \\* ptr_x\\.span\\)\\) = 16;" 1 "original" } }
+    ! { dg-final { scan-tree-dump-times {\*\(integer\(kind=4\) \*\) \(ptr_x\.data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?ptr_x\.offset>? \+ (?:NON_LVALUE_EXPR <)?ptr_x\.dim\[0\]\.stride>? \* 4\) \* (?:NON_LVALUE_EXPR <)?ptr_x\.span>?\)\) = 16;} 1 "original" } }
   end subroutine check_ptr_elem
   subroutine check_ptr_scalarized
     integer, target :: y(8)
@@ -97,7 +97,7 @@ contains
     ptr_y = 17
     if (any(ptr_y /= 17)) stop 17
     ! pointers are referenced with pointer arithmetic.
-    ! { dg-final { scan-tree-dump-times "\\*\\(\\(integer\\(kind=4\\) \\*\\) D.\\d+ \\+ \\(sizetype\\) \\(\\(S.\\d+ \\* D.\\d+ \\+ D.\\d+\\) \\* ptr_y\\.span\\)\\) = 17;" 1 "original" } }
+    ! { dg-final { scan-tree-dump-times {\*\(\(integer\(kind=4\) \*\) D.\d+ \+ \(sizetype\) \(\(S.\d+ \* D.\d+ [+-] D.\d+\) \* (?:NON_LVALUE_EXPR <)?ptr_y\.span>?\)\) = 17;} 1 "original" } }
   end subroutine check_ptr_scalarized
   subroutine check_explicit_shape_elem
     integer :: explicit_shape_x(9)
@@ -129,7 +129,7 @@ contains
     allocatable_x(2) = 20
     if (any(allocatable_x /= (/ 0, 20, 0, 0 /))) stop 20
     ! Allocatable arrays are referenced with array indexing.
-    ! { dg-final { scan-tree-dump-times "\\(\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) allocatable_x\\.data\\)\\\[allocatable_x\\.offset \\+ 2\\\] = 20;" 1 "original" } }
+    ! { dg-final { scan-tree-dump-times {\*\(integer\(kind=4\)\[0:\] \* restrict\) allocatable_x\.data\)\[(?:NON_LVALUE_EXPR <)?allocatable_x\.offset>? \+ 2\] = 20;} 1 "original" } }
   end subroutine check_allocatable_array_elem
   subroutine check_allocatable_array_scalarized
     integer, allocatable :: allocatable_y(:)
@@ -152,7 +152,7 @@ contains
     call cares(x)
     if (any(x /= (/ 0, 0, 22, 0, 0, 0 /))) stop 22
     ! Assumed rank arrays are referenced with pointer arithmetic.
-    ! { dg-final { scan-tree-dump-times "\\*\\(\\(integer\\(kind=4\\) \\*\\) __tmp_INTEGER_4_rank_1\\.data \\+ \\(sizetype\\) \\(\\(__tmp_INTEGER_4_rank_1\\.offset \\+ __tmp_INTEGER_4_rank_1\\.dim\\\[0\\\]\\.stride \\* 3\\) \\* 4\\)\\) = 22;" 1 "original" } }
+    ! { dg-final { scan-tree-dump-times {\*\(\(integer\(kind=4\) \*\) __tmp_INTEGER_4_rank_1\.data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?__tmp_INTEGER_4_rank_1\.offset>? \+ (?:NON_LVALUE_EXPR <)?__tmp_INTEGER_4_rank_1\.dim\[0\]\.stride>? \* 3\) \* 4\)\) = 22;} 1 "original" } }
   end subroutine check_assumed_rank_elem
   subroutine carss(assumed_rank_y)
     integer :: assumed_rank_y(..)
diff --git a/gcc/testsuite/gfortran.dg/bind-c-contiguous-2.f90 b/gcc/testsuite/gfortran.dg/bind-c-contiguous-2.f90
index 5b546800e7ff..38e60ba897f3 100644
--- a/gcc/testsuite/gfortran.dg/bind-c-contiguous-2.f90
+++ b/gcc/testsuite/gfortran.dg/bind-c-contiguous-2.f90
@@ -60,12 +60,12 @@ end
 
 ! Copy in + out
 
-! { dg-final { scan-tree-dump-times "__builtin_memcpy \\(\\(void \\*\\) xx->data \\+ xx->dtype.elem_len \\* arrayidx.\[0-9\]+, _xx->base_addr \\+ shift.\[0-9\]+, xx->dtype.elem_len\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {__builtin_memcpy \(\(void \*\) xx->data \+ (?:NON_LVALUE_EXPR <)?xx->dtype\.elem_len>? \* arrayidx.[0-9]+, _xx->base_addr \+ shift.[0-9]+, (?:NON_LVALUE_EXPR <)?xx->dtype.elem_len>?\);} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "xx->data = \\(void \\* restrict\\) _xx->base_addr;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "__builtin_memcpy \\(\\(void \\*\\) xx->data \\+ xx->dtype.elem_len \\* arrayidx.\[0-9\]+, _xx->base_addr \\+ shift.\[0-9\]+, xx->dtype.elem_len\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "__builtin_memcpy \\(\\(void \\*\\) yy->data \\+ yy->dtype.elem_len \\* arrayidx.\[0-9\]+, _yy->base_addr \\+ shift.\[0-9\]+, yy->dtype.elem_len\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {__builtin_memcpy \(\(void \*\) xx->data \+ (?:NON_LVALUE_EXPR <)?xx->dtype\.elem_len>? \* arrayidx.[0-9]+, _xx->base_addr \+ shift.[0-9]+, (?:NON_LVALUE_EXPR <)?xx->dtype.elem_len>?\);} 1 "original" } }
+! { dg-final { scan-tree-dump-times {__builtin_memcpy \(\(void \*\) yy->data \+ (?:NON_LVALUE_EXPR <)?yy->dtype\.elem_len>? \* arrayidx.[0-9]+, _yy->base_addr \+ shift.[0-9]+, (?:NON_LVALUE_EXPR <)?yy->dtype.elem_len>?\);} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "yy->data = \\(void \\* restrict\\) _yy->base_addr;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "__builtin_memcpy \\(_yy->base_addr \\+ shift.\[0-9\]+, \\(void \\*\\) yy->data \\+ yy->dtype.elem_len \\* arrayidx.\[0-9\]+, yy->dtype.elem_len\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {__builtin_memcpy \(_yy->base_addr \+ shift.[0-9]+, \(void \*\) yy->data \+ (?:NON_LVALUE_EXPR <)?yy->dtype\.elem_len>? \* arrayidx.[0-9]+, (?:NON_LVALUE_EXPR <)?yy->dtype.elem_len>?\);} 1 "original" } }
 
 ! { dg-final { scan-tree-dump-times "zz = \\(character\\(kind=1\\)\\\[0:\\\]\\\[1:zz.\[0-9\]+\\\] \\* restrict\\) _zz->base_addr;" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "__builtin_memcpy \\(\\(void \\*\\) zz \\+ _zz->elem_len \\* arrayidx.\[0-9\]+, _zz->base_addr \\+ shift.\[0-9\]+, _zz->elem_len\\);" 1 "original" } }
@@ -73,10 +73,10 @@ end
 
 ! Copy in only
 
-! { dg-final { scan-tree-dump-times "__builtin_memcpy \\(\\(void \\*\\) aa->data \\+ aa->dtype.elem_len \\* arrayidx.\[0-9\]+, _aa->base_addr \\+ shift.\[0-9\]+, aa->dtype.elem_len\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {__builtin_memcpy \(\(void \*\) aa->data \+ (?:NON_LVALUE_EXPR <)?aa->dtype\.elem_len>? \* arrayidx.[0-9]+, _aa->base_addr \+ shift.[0-9]+, (?:NON_LVALUE_EXPR <)?aa->dtype.elem_len>?\);} 1 "original" } }
 
 ! { dg-final { scan-tree-dump-times "aa->data = \\(void \\* restrict\\) _aa->base_addr;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "__builtin_memcpy \\(\\(void \\*\\) bb->data \\+ bb->dtype.elem_len \\* arrayidx.\[0-9\]+, _bb->base_addr \\+ shift.\[0-9\]+, bb->dtype.elem_len\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {__builtin_memcpy \(\(void \*\) bb->data \+ (?:NON_LVALUE_EXPR <)?bb->dtype\.elem_len>? \* arrayidx.[0-9]+, _bb->base_addr \+ shift.[0-9]+, (?:NON_LVALUE_EXPR <)?bb->dtype.elem_len>?\);} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "bb->data = \\(void \\* restrict\\) _bb->base_addr;" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "cc = \\(character\\(kind=1\\)\\\[0:\\\]\\\[1:cc.\[0-9\]+\\\] \\* restrict\\) _cc->base_addr;" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "__builtin_memcpy \\(\\(void \\*\\) cc \\+ _cc->elem_len \\* arrayidx.\[0-9\]+, _cc->base_addr \\+ shift.\[0-9\]+, _cc->elem_len\\);" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/bind_c_array_params_2.f90 b/gcc/testsuite/gfortran.dg/bind_c_array_params_2.f90
index aa6a37b48504..7d79d9b44ac0 100644
--- a/gcc/testsuite/gfortran.dg/bind_c_array_params_2.f90
+++ b/gcc/testsuite/gfortran.dg/bind_c_array_params_2.f90
@@ -46,8 +46,8 @@ end
 
 ! { dg-final { scan-tree-dump "if \\(idx.. <= 1\\) goto L..;" "original" } }
 ! { dg-final { scan-tree-dump "cfi...dim\\\[idx..\\\].lower_bound = 0;" "original" } }
-! { dg-final { scan-tree-dump "cfi...dim\\\[idx..\\\].extent = \\(parm...dim\\\[idx..\\\].ubound - parm...dim\\\[idx..\\\].lbound\\) \\+ 1;" "original" } }
-! { dg-final { scan-tree-dump "cfi...dim\\\[idx..\\\].sm = parm...dim\\\[idx..\\\].stride \\* parm...span;" "original" } }
+! { dg-final { scan-tree-dump {cfi..\.dim\[idx..\].extent = \((?:NON_LVALUE_EXPR <)?parm..\.dim\[idx..\]\.ubound>? - (?:NON_LVALUE_EXPR <)?parm..\.dim\[idx..\]\.lbound>?\) \+ 1;} "original" } }
+! { dg-final { scan-tree-dump {cfi..\.dim\[idx..\].sm = (?:NON_LVALUE_EXPR <)?parm...dim\[idx..\].stride>? \* (?:NON_LVALUE_EXPR <)?parm..\.span>?;} "original" } }
 ! { dg-final { scan-tree-dump "idx.. = idx.. \\+ 1;" "original" } }
 
 ! { dg-final { scan-tree-dump "test \\(&cfi..\\);" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90 b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90
index 7939a797501a..6f46c4c5243e 100644
--- a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90
@@ -19,7 +19,7 @@ end
 ! { dg-final { scan-tree-dump-times "bar \\(real\\(kind=4\\)\\\[2\\\] \\* restrict x, void \\* restrict caf_token.., integer\\(kind=\[48\]\\) caf_offset..\\)" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "mylcobound = 5;" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "parm...dim\\\[1\\\].lbound = 5;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "myucobound =\[^\n\r\]* parm...dim\\\[1\\\].lbound \\+ \[^\n\r]*_gfortran_caf_num_images \\(0B, 0B\\).? \\+ -?\[0-9\]+\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {myucobound =[^\n\r]* (?:NON_LVALUE_EXPR <)?parm..\.dim\[1\].lbound>? \+ [^\n\r]*_gfortran_caf_num_images \(0B, 0B\).? \+ -?[0-9]+\);} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "mylbound = 1;" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "mythis_image = _gfortran_caf_this_image \\(0B\\);" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "bar \\(x, caf_token.., 0\\);" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90 b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90
index 31a7677ed0e1..e23bc5e6e38d 100644
--- a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90
@@ -19,7 +19,7 @@ end
 ! { dg-final { scan-tree-dump-times "bar \\(struct array02_real\\(kind=4\\) & restrict x, void \\* restrict caf_token.., integer\\(kind=\[48\]\\) caf_offset..\\)" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "mylcobound = 5;" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "parm...dim\\\[1\\\].lbound = 5;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "myucobound =\[^\n\r\]* parm...dim\\\[1\\\].lbound \\+ \[^\n\r\]*_gfortran_caf_num_images \\(0B, 0B\\).? \\+ -?\[0-9\]+\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {myucobound =[^\n\r]* (?:NON_LVALUE_EXPR <)?parm..\.dim\[1\]\.lbound>? \+ [^\n\r]*_gfortran_caf_num_images \(0B, 0B\).? \+ -?[0-9]+\);} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "mylbound = 1;" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "mythis_image = _gfortran_caf_this_image \\(0B\\);" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "bar \\(&parm.\[0-9\]+, caf_token.\[0-9\]+, \\(integer\\(kind=\[48\]\\)\\) parm.\[0-9\]+.data - \\(integer\\(kind=\[48\]\\)\\) x\\);" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_lock_7.f90 b/gcc/testsuite/gfortran.dg/coarray_lock_7.f90
index 4f4bdde856d9..314cf91cc87a 100644
--- a/gcc/testsuite/gfortran.dg/coarray_lock_7.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_lock_7.f90
@@ -35,12 +35,12 @@ end
 ! { dg-final { scan-tree-dump-times "_gfortran_caf_lock \\(caf_token.., 0, 0, 0B, 0B, 0B, 0\\);" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "_gfortran_caf_unlock \\(caf_token.., 0, 0, 0B, 0B, 0\\);" 1 "original" } }
 
-! { dg-final { scan-tree-dump-times "_gfortran_caf_lock \\(caf_token.., .*\\(\\(3 - parm.\\d+.dim\\\[0\\\].lbound\\) \\+ \\(MAX_EXPR <parm.\\d+.dim\\\[0\\\].ubound - parm.\\d+.dim\\\[0\\\].lbound, -1> \\+ 1\\) \\* \\(3 - parm.\\d+.dim\\\[1\\\].lbound\\)\\), 0, 0B, &ii, 0B, 0\\);|_gfortran_caf_lock \\(caf_token.1, \\(3 - parm.\\d+.dim\\\[0\\\].lbound\\) \\+ \\(MAX_EXPR <parm.\\d+.dim\\\[0\\\].ubound - parm.\\d+.dim\\\[0\\\].lbound, -1> \\+ 1\\) \\* \\(3 - parm.\\d+.dim\\\[1\\\].lbound\\), 0, 0B, &ii, 0B, 0\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "_gfortran_caf_unlock \\(caf_token.., .*\\(\\(2 - parm.\\d+.dim\\\[0\\\].lbound\\) \\+ \\(MAX_EXPR <parm.\\d+.dim\\\[0\\\].ubound - parm.\\d+.dim\\\[0\\\].lbound, -1> \\+ 1\\) \\* \\(3 - parm.\\d+.dim\\\[1\\\].lbound\\)\\), 0, &ii, 0B, 0\\);|_gfortran_caf_unlock \\(caf_token.., \\(2 - parm.\\d+.dim\\\[0\\\].lbound\\) \\+ \\(MAX_EXPR <parm.\\d+.dim\\\[0\\\].ubound - parm.\\d+.dim\\\[0\\\].lbound, -1> \\+ 1\\) \\* \\(3 - parm.\\d+.dim\\\[1\\\].lbound\\), 0, &ii, 0B, 0\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {_gfortran_caf_lock \(caf_token.., .*\(\(3 - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[0\]\.lbound>?\) \+ \(\((?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[0\]\.ubound>? - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[0\]\.lbound>?\) \+ 1\) \* \(3 - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[1\]\.lbound>?\)\), 0, 0B, &ii, 0B, 0\);|_gfortran_caf_lock \(caf_token.1, \(.*?\) \(\(3 - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[0\]\.lbound>?\) \+ \(MAX_EXPR <(?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[0\]\.ubound>? - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[0\]\.lbound>?, -1> \+ 1\) \* \(3 - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[1\]\.lbound>?\)\), 0, 0B, &ii, 0B, 0\);} 1 "original" } }
+! { dg-final { scan-tree-dump-times {_gfortran_caf_unlock \(caf_token.., .*\(\(2 - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[0\]\.lbound>?\) \+ \(\(parm.\d+\.dim\[0\]\.ubound - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[0\]\.lbound>?\) \+ 1\) \* \(3 - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[1\]\.lbound>?\)\), 0, &ii, 0B, 0\);|_gfortran_caf_unlock \(caf_token.., \(.*?\) \(\(2 - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[0\]\.lbound>?\) \+ \(MAX_EXPR <(?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[0\]\.ubound>? - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[0\]\.lbound>?, -1> \+ 1\) \* \(3 - (?:NON_LVALUE_EXPR <)?parm.\d+\.dim\[1\]\.lbound>?\)\), 0, &ii, 0B, 0\);} 1 "original" } }
 
-! { dg-final { scan-tree-dump-times "_gfortran_caf_lock \\(three.token, 0, \\(integer\\(kind=4\\)\\) \\(5 - three.dim\\\[0\\\].lbound\\), &acquired.\[0-9\]+, 0B, 0B, 0\\);|_gfortran_caf_lock \\(three.token, 0, 5 - three.dim\\\[0\\\].lbound, &acquired.\[0-9\]+, 0B, 0B, 0\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "_gfortran_caf_unlock \\(three.token, 0, \\(integer\\(kind=4\\)\\) \\(8 - three.dim\\\[0\\\].lbound\\), &ii, 0B, 0\\);|_gfortran_caf_unlock \\(three.token, 0, 8 - three.dim\\\[0\\\].lbound, &ii, 0B, 0\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {_gfortran_caf_lock \(three.token, 0, \(integer\(kind=4\)\) \(5 - (?:NON_LVALUE_EXPR <)?three.dim\[0\].lbound>?\), &acquired.[0-9]+, 0B, 0B, 0\);|_gfortran_caf_lock \(three.token, 0, 5 - (?:NON_LVALUE_EXPR <)?three.dim\[0\].lbound>?, &acquired.[0-9]+, 0B, 0B, 0\);} 1 "original" } }
+! { dg-final { scan-tree-dump-times {_gfortran_caf_unlock \(three.token, 0, \(integer\(kind=4\)\) \(8 - (?:NON_LVALUE_EXPR <)?three.dim\[0\].lbound>?\), &ii, 0B, 0\);|_gfortran_caf_unlock \(three.token, 0, 8 - (?:NON_LVALUE_EXPR <)?three.dim\[0\].lbound>?, &ii, 0B, 0\);} 1 "original" } }
 
-! { dg-final { scan-tree-dump-times "_gfortran_caf_lock \\(four.token, .*\\(1 - four.dim\\\[0\\\].lbound\\), \\(integer\\(kind=4\\)\\) \\(7 - four.dim\\\[1\\\].lbound\\), &acquired.\[0-9\]+, &ii, 0B, 0\\);|_gfortran_caf_lock \\(four.token, \[^\n\r]*1 - four.dim\\\[0\\\].lbound\\)?, 7 - four.dim\\\[1\\\].lbound, &acquired.\[0-9\]+, &ii, 0B, 0\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "_gfortran_caf_unlock \\(four.token, .*\\(2 - four.dim\\\[0\\\].lbound\\), \\(integer\\(kind=4\\)\\) \\(8 - four.dim\\\[1\\\].lbound\\), 0B, 0B, 0\\);|_gfortran_caf_unlock \\(four.token, \[^\n\r]*2 - four.dim\\\[0\\\].lbound\\)?, 8 - four.dim\\\[1\\\].lbound, 0B, 0B, 0\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {_gfortran_caf_lock \(four.token, .*\(1 - (?:NON_LVALUE_EXPR <)?four.dim\[0\].lbound>?\), \(integer\(kind=4\)\) \(7 - (?:NON_LVALUE_EXPR <)?four.dim\[1\].lbound>?\), &acquired.[0-9]+, &ii, 0B, 0\);|_gfortran_caf_lock \(four.token, [^\n\r]*1 - (?:NON_LVALUE_EXPR <)?four.dim\[0\].lbound>?\)?, 7 - (?:NON_LVALUE_EXPR <)?four.dim\[1\].lbound>?, &acquired.[0-9]+, &ii, 0B, 0\);} 1 "original" } }
+! { dg-final { scan-tree-dump-times {_gfortran_caf_unlock \(four.token, .*\(2 - (?:NON_LVALUE_EXPR <)?four.dim\[0\].lbound>?\), \(integer\(kind=4\)\) \(8 - (?:NON_LVALUE_EXPR <)?four.dim\[1\].lbound>?\), 0B, 0B, 0\);|_gfortran_caf_unlock \(four.token, \[^\n\r]*2 - (?:NON_LVALUE_EXPR <)?four.dim\[0\].lbound>?\)?, 8 - four.dim\[1\].lbound, 0B, 0B, 0\);} 1 "original" } }
 
diff --git a/gcc/testsuite/gfortran.dg/contiguous_3.f90 b/gcc/testsuite/gfortran.dg/contiguous_3.f90
index ba0ccce8f9ee..05bd785be464 100644
--- a/gcc/testsuite/gfortran.dg/contiguous_3.f90
+++ b/gcc/testsuite/gfortran.dg/contiguous_3.f90
@@ -35,8 +35,8 @@ end subroutine t2
 
 ! { dg-final { scan-tree-dump-times "= a1->dim.0..stride;" 0 "original" } }
 ! { dg-final { scan-tree-dump-times "= b1->dim.0..stride;" 0 "original" } }
-! { dg-final { scan-tree-dump-times "= c2->dim.0..stride;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "= d2->dim.0..stride;" 1 "original" } }
+! { dg-final { scan-tree-dump-times {= (?:NON_LVALUE_EXPR <)?c2->dim\[0\]\.stride>?;} 1 "original" } }
+! { dg-final { scan-tree-dump-times {= (?:NON_LVALUE_EXPR <)?d2->dim\[0\]\.stride>?;} 1 "original" } }
 
 
 subroutine test3()
diff --git a/gcc/testsuite/gfortran.dg/gomp/depend-4.f90 b/gcc/testsuite/gfortran.dg/gomp/depend-4.f90
index edc30fe7291b..042a8a5da908 100644
--- a/gcc/testsuite/gfortran.dg/gomp/depend-4.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/depend-4.f90
@@ -194,14 +194,14 @@ end
 ! { dg-final { scan-tree-dump-times "&object\\\[19\\\] = &dossv;" 1 "original" } }
 
 ! { dg-final { scan-tree-dump-times "&elem\\\[0\\\] = &aa\\\[1\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[1\\\] = &\\(\\*\\(integer.kind=4.\\\[0:\\\] \\* restrict\\) aaa.data\\)\\\[aaa.offset \\+ 2\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[2\\\] = \\(integer.kind=4. \\*\\) \\(aap.data \\+ .sizetype. \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[1\] = &\(\*\(integer\(kind=4\)\[0:\] \* restrict\) aaa\.data\)\[(?:NON_LVALUE_EXPR <)?aaa\.offset>? \+ 2\];} 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[2\] = \(integer\(kind=4\) \*\) \(aap\.data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?aap\.offset>? \+ (?:NON_LVALUE_EXPR <)?aap\.dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?aap\.span>?\)\);} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "&elem\\\[3\\\] = &\\(\\*daa\\)\\\[1\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[4\\\] = &\\(\\*\\(integer.kind=4.\\\[0:\\\] \\* restrict\\) daaa->data\\)\\\[daaa->offset \\+ 2\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[5\\\] = \\(integer.kind=4. \\*\\) \\(daap->data \\+ .sizetype. \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[4\] = &\(\*\(integer\(kind=4\)\[0:\] \* restrict\) daaa->data\)\[(?:NON_LVALUE_EXPR <)?daaa->offset>? \+ 2\];} 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[5\] = \(integer\(kind=4\) \*\) \(daap->data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?daap->offset>? \+ (?:NON_LVALUE_EXPR <)?daap->dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?daap->span>?\)\);} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "&elem\\\[6\\\] = &\\(\\*doaa\\)\\\[1\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[7\\\] = &\\(\\*\\(integer.kind=4.\\\[0:\\\] \\* restrict\\) doaaa->data\\)\\\[doaaa->offset \\+ 2\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[8\\\] = \\(integer.kind=4. \\*\\) \\(doaap->data \\+ .sizetype. \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[7\] = &\(\*\(integer\(kind=4\)\[0:\] \* restrict\) doaaa->data\)\[(?:NON_LVALUE_EXPR <)?doaaa->offset>? \+ 2\];} 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[8\] = \(integer\(kind=4\) \*\) \(doaap->data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?doaap->offset>? \+ (?:NON_LVALUE_EXPR <)?doaap->dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?doaap->span>?\)\);} 1 "original" } }
 
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:ss\\)" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*sp\\)" 1 "original" } }
@@ -222,14 +222,14 @@ end
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) doaaa->data\\)" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\*\\) doaap->data\\)" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:aa\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) aaa.data\\)\\\[aaa.offset \\+ 2\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(integer\\(kind=4\\) \\*\\) \\(aap.data \\+ \\(sizetype\\) \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\(\*\(integer\(kind=4\)\[0:\] \* restrict\) aaa\.data\)\[(?:NON_LVALUE_EXPR <)?aaa\.offset>? \+ 2\]\)} 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\*\(integer\(kind=4\) \*\) \(aap\.data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?aap\.offset>? \+ (?:NON_LVALUE_EXPR <)?aap\.dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?aap\.span>?\)\)\)} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*daa\\)\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) daaa->data\\)\\\[daaa->offset \\+ 2\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(integer\\(kind=4\\) \\*\\) \\(daap->data \\+ \\(sizetype\\) \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\(\*\(integer\(kind=4\)\[0:\] \* restrict\) daaa->data\)\[(?:NON_LVALUE_EXPR <)?daaa->offset>? \+ 2\]\)} 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\*\(integer\(kind=4\) \*\) \(daap->data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?daap->offset>? \+ (?:NON_LVALUE_EXPR <)?daap->dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?daap->span>?\)\)\)} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*doaa\\)\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) doaaa->data\\)\\\[doaaa->offset \\+ 2\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(integer\\(kind=4\\) \\*\\) \\(doaap->data \\+ \\(sizetype\\) \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\(\*\(integer\(kind=4\)\[0:\] \* restrict\) doaaa->data\)\[(?:NON_LVALUE_EXPR <)?doaaa->offset>? \+ 2\]\)} 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\*\(integer\(kind=4\) \*\) \(doaap->data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?doaap->offset>? \+ (?:NON_LVALUE_EXPR <)?doaap->dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?doaap->span>?\)\)\)} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:dossv\\)" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:dssv\\)" 1 "original" } }
 
diff --git a/gcc/testsuite/gfortran.dg/gomp/depend-5.f90 b/gcc/testsuite/gfortran.dg/gomp/depend-5.f90
index 4cbe3d47d021..c7c27009e07d 100644
--- a/gcc/testsuite/gfortran.dg/gomp/depend-5.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/depend-5.f90
@@ -72,11 +72,11 @@ end
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\*dosa\\)" 1 "original" } }
 
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:aa\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\(\\*\\(integer\\(kind=\[0-9\]+\\)\\\[0:\\\] \\* restrict\\) aaa.data\\)\\\[aaa.offset \\+ 2\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\(integer\\(kind=\[0-9\]+\\) \\*\\) \\(aap.data \\+ \\(sizetype\\) \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(depobj:\(\*\(integer\(kind=[0-9]+\)\[0:\] \* restrict\) aaa\.data\)\[(?:NON_LVALUE_EXPR <)?aaa\.offset>? \+ 2\]\)} 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(depobj:\*\(integer\(kind=[0-9]+\) \*\) \(aap\.data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?aap\.offset>? \+ (?:NON_LVALUE_EXPR <)?aap\.dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?aap\.span>?\)\)\)} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\(\\*daa\\)\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\(\\*\\(integer\\(kind=\[0-9\]+\\)\\\[0:\\\] \\* restrict\\) daaa->data\\)\\\[daaa->offset \\+ 2\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\(integer\\(kind=\[0-9\]+\\) \\*\\) \\(daap->data \\+ \\(sizetype\\) \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(depobj:\(\*\(integer\(kind=[0-9]+\)\[0:\] \* restrict\) daaa->data\)\[(?:NON_LVALUE_EXPR <)?daaa->offset>? \+ 2\]\)} 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(depobj:\*\(integer\(kind=[0-9]+\) \*\) \(daap->data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?daap->offset>? \+ (?:NON_LVALUE_EXPR <)?daap->dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?daap->span>?\)\)\)} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\(\\*doaa\\)\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\(\\*\\(integer\\(kind=\[0-9\]+\\)\\\[0:\\\] \\* restrict\\) doaaa->data\\)\\\[doaaa->offset \\+ 2\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\(integer\\(kind=\[0-9\]+\\) \\*\\) \\(doaap->data \\+ \\(sizetype\\) \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(depobj:\(\*\(integer\(kind=[0-9]+\)\[0:\] \* restrict\) doaaa->data\)\[(?:NON_LVALUE_EXPR <)?doaaa->offset>? \+ 2\]\)} 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(depobj:\*\(integer\(kind=[0-9]+\) \*\) \(doaap->data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?doaap->offset>? \+ (?:NON_LVALUE_EXPR <)?doaap->dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?doaap->span>?\)\)\)} 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/gomp/depend-6.f90 b/gcc/testsuite/gfortran.dg/gomp/depend-6.f90
index fbac14b1b944..315eed4453d6 100644
--- a/gcc/testsuite/gfortran.dg/gomp/depend-6.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/depend-6.f90
@@ -194,14 +194,14 @@ end
 ! { dg-final { scan-tree-dump-times "&object\\\[19\\\] = &dossv;" 1 "original" } }
 
 ! { dg-final { scan-tree-dump-times "&elem\\\[0\\\] = &aa\\\[1\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[1\\\] = &\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) aaa.data\\)\\\[aaa.offset \\+ 2\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[2\\\] = \\(void \\* \\*\\) \\(aap.data \\+ .sizetype. \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[1\] = &\(\*\(void \*\[0:\] \* restrict\) aaa\.data\)\[(?:NON_LVALUE_EXPR <)?aaa\.offset>? \+ 2\];} 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[2\] = \(void \* \*\) \(aap\.data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?aap\.offset>? \+ (?:NON_LVALUE_EXPR <)?aap\.dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?aap\.span>?\)\);} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "&elem\\\[3\\\] = &\\(\\*daa\\)\\\[1\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[4\\\] = &\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) daaa->data\\)\\\[daaa->offset \\+ 2\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[5\\\] = \\(void \\* \\*\\) \\(daap->data \\+ .sizetype. \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[4\] = &\(\*\(void \*\[0:\] \* restrict\) daaa->data\)\[(?:NON_LVALUE_EXPR <)?daaa->offset>? \+ 2\];} 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[5\] = \(void \* \*\) \(daap->data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?daap->offset>? \+ (?:NON_LVALUE_EXPR <)?daap->dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?daap->span>?\)\);} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "&elem\\\[6\\\] = &\\(\\*doaa\\)\\\[1\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[7\\\] = &\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) doaaa->data\\)\\\[doaaa->offset \\+ 2\\\];" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem\\\[8\\\] = \\(void \\* \\*\\) \\(doaap->data \\+ .sizetype. \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[7\] = &\(\*\(void \*\[0:\] \* restrict\) doaaa->data\)\[(?:NON_LVALUE_EXPR <)?doaaa->offset>? \+ 2\];} 1 "original" } }
+! { dg-final { scan-tree-dump-times {&elem\[8\] = \(void \* \*\) \(doaap->data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?doaap->offset>? \+ (?:NON_LVALUE_EXPR <)?doaap->dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?doaap->span>?\)\);} 1 "original" } }
 
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:ss\\)" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*sp\\)" 1 "original" } }
@@ -222,14 +222,15 @@ end
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(void \\*\\\[0:\\\] \\* restrict\\) doaaa->data\\)" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(void \\*\\\[0:\\\] \\*\\) doaap->data\\)" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:aa\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) aaa.data\\)\\\[aaa.offset \\+ 2\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(void \\* \\*\\) \\(aap.data \\+ \\(sizetype\\) \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\(\*\(void \*\[0:\] \* restrict\) aaa\.data\)\[(?:NON_LVALUE_EXPR <)?aaa\.offset>? \+ 2\]\)} 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\*\(void \* \*\) \(aap\.data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?aap\.offset>? \+ (?:NON_LVALUE_EXPR <)?aap\.dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?aap\.span>?\)\)\)} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*daa\\)\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) daaa->data\\)\\\[daaa->offset \\+ 2\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(void \\* \\*\\) \\(daap->data \\+ \\(sizetype\\) \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\(\*\(void \*\[0:\] \* restrict\) daaa->data\)\[(?:NON_LVALUE_EXPR <)?daaa->offset>? \+ 2\]\)} 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\*\(void \* \*\) \(daap->data \+ \(sizetype\) \(\((?:NON_LVALUE_EXPR <)?daap->offset>? \+ (?:NON_LVALUE_EXPR <)?daap->dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?daap->span>?\)\)\)} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*doaa\\)\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) doaaa->data\\)\\\[doaaa->offset \\+ 2\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(void \\* \\*\\) \\(doaap->data \\+ \\(sizetype\\) \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\(\*\(void \*\[0:\] \* restrict\) doaaa->data\)\[(?:NON_LVALUE_EXPR <)?doaaa->offset>? \+ 2\]\)} 1 "original" } }
+! { dg-final { scan-tree-dump-times {#pragma omp task depend\(out:\*\(void \* \*\) \(doaap->data \+ \(sizetype\)
+! \(\((?:NON_LVALUE_EXPR <)?doaap->offset>? \+ (?:NON_LVALUE_EXPR <)?doaap->dim\[0\]\.stride>? \* 2\) \* (?:NON_LVALUE_EXPR <)?doaap->span>?\)\)\)} 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:dossv\\)" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:dssv\\)" 1 "original" } }
 
diff --git a/gcc/testsuite/gfortran.dg/intrinsic_size_3.f90 b/gcc/testsuite/gfortran.dg/intrinsic_size_3.f90
index afdf9b34d4bc..593296c0a7e6 100644
--- a/gcc/testsuite/gfortran.dg/intrinsic_size_3.f90
+++ b/gcc/testsuite/gfortran.dg/intrinsic_size_3.f90
@@ -22,4 +22,4 @@ program bug
   stop
 end program bug
 
-! { dg-final { scan-tree-dump-times "iszs = \\(integer\\(kind=2\\)\\) MAX_EXPR <\\(a.dim.0..ubound - a.dim.0..lbound\\) \\+ 1, 0>;" 1 "original" } }
+! { dg-final { scan-tree-dump-times {iszs = \(integer\(kind=2\)\) MAX_EXPR <\((?:NON_LVALUE_EXPR <)?a\.dim\[0\]\.ubound>? - (?:NON_LVALUE_EXPR <)?a\.dim\[0\]\.lbound>?\) \+ 1, 0>;} 1 "original" } }
diff --git a/libgomp/testsuite/libgomp.fortran/allocators-1.f90 b/libgomp/testsuite/libgomp.fortran/allocators-1.f90
index 8e1d1944fa5f..6bba6e046727 100644
--- a/libgomp/testsuite/libgomp.fortran/allocators-1.f90
+++ b/libgomp/testsuite/libgomp.fortran/allocators-1.f90
@@ -49,8 +49,8 @@ end
 ! { dg-final { scan-tree-dump-times "a.data = \\(void \\* restrict\\) __builtin_GOMP_alloc \\(512, 20, D\\.\[0-9\]+\\);" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "a.data = \\(void \\* restrict\\) __builtin_GOMP_alloc \\(4, 28, 0B\\);" 1 "original" } }
 ! { dg-final { scan-tree-dump-times "a.dtype.version = 1;" 2 "original" } }
-! { dg-final { scan-tree-dump-times "a.data = \\(void \\* restrict\\) \\(a.dtype.version == 1 \\? __builtin_omp_realloc \\(\\(void \\*\\) a.data, 4, 0B, 0B\\) : __builtin_realloc \\(\\(void \\*\\) a.data, 4\\)\\);" 2 "original" } }
-! { dg-final { scan-tree-dump-times "if \\(a.dtype.version == 1\\)" 3 "original" } }
+! { dg-final { scan-tree-dump-times "a.data = \\(void \\* restrict\\) \\((?:NON_LVALUE_EXPR <)?a.dtype.version>? == 1 \\? __builtin_omp_realloc \\(\\(void \\*\\) a.data, 4, 0B, 0B\\) : __builtin_realloc \\(\\(void \\*\\) a.data, 4\\)\\);" 2 "original" } }
+! { dg-final { scan-tree-dump-times "if \\((?:NON_LVALUE_EXPR <)?a.dtype.version>? == 1\\)" 3 "original" } }
 ! { dg-final { scan-tree-dump-times "__builtin_GOMP_free \\(\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) a.data, 0B\\);" 3 "original" } }
 ! { dg-final { scan-tree-dump-times "a.dtype.version = 0;" 3 "original" } }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.