https://gcc.gnu.org/g:92325afa259194e44fc21b36ba1d70d00c2e70fe

commit r16-7602-g92325afa259194e44fc21b36ba1d70d00c2e70fe
Author: Kwok Cheung Yeung <[email protected]>
Date:   Fri Feb 20 16:07:45 2026 +0000

    openmp: Fix regression in libgomp.c++/target-6.C testcase [PR113436]
    
    The fix for PR113436 introduced a regression causing the
    libgomp.c++/target-6.C testcase to fail on some configurations.
    
    This was caused by a change in how is_variable_sized is applied for 
variables
    that are references in private clauses, causing the path that was intended 
for
    variables that are variable-sized in themselves to be taken, instead of
    that for referencing a variable-sized object.
    
    2026-02-20  Kwok Cheung Yeung  <[email protected]>
    
    gcc/
    
            PR middle-end/113436
            * omp-low.cc (omp_lower_target):  Do not check for variable-length
            variables in private clauses by reference when allocating memory.
    
    gcc/testsuite/
    
            PR middle-end/113436
            * g++.dg/gomp/pr113436-2.C: New.

Diff:
---
 gcc/omp-low.cc                         |  2 +-
 gcc/testsuite/g++.dg/gomp/pr113436-2.C | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/gcc/omp-low.cc b/gcc/omp-low.cc
index 15245eae9dec..aeed1d25e8af 100644
--- a/gcc/omp-low.cc
+++ b/gcc/omp-low.cc
@@ -14458,7 +14458,7 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, 
omp_context *ctx)
          case OMP_CLAUSE_PRIVATE:
            var = OMP_CLAUSE_DECL (c);
            by_ref = omp_privatize_by_reference (var);
-           if (is_variable_sized (var, by_ref))
+           if (is_variable_sized (var))
              {
                tree new_var = lookup_decl (var, ctx);
                tree *allocate_ptr = alloc_map.get (new_var);
diff --git a/gcc/testsuite/g++.dg/gomp/pr113436-2.C 
b/gcc/testsuite/g++.dg/gomp/pr113436-2.C
new file mode 100644
index 000000000000..70f6ffc196e6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/pr113436-2.C
@@ -0,0 +1,17 @@
+// PR middle-end/113436
+// { dg-do "compile" }
+// { dg-options "-fopenmp -fdump-tree-omplower" }
+
+void f(int x)
+{
+  int a[x];
+  int (&c)[x] = a;
+
+  #pragma omp target private (c)
+  {
+    c[0] = 1;
+  }
+}
+
+// Ensure that the size of memory allocated for the VLA is from a variable 
rather than a constant.
+// { dg-final { scan-tree-dump "D\\\.\[0-9\]\+ = __builtin_alloca_with_align 
\\\(D\\\.\[0-9\]\+, \[0-9\]\+\\\);" "omplower" } }

Reply via email to