From 92325afa259194e44fc21b36ba1d70d00c2e70fe Mon Sep 17 00:00:00 2001 From: Kwok Cheung Yeung Date: Fri, 20 Feb 2026 16:07:45 +0000 Subject: [PATCH] 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 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. --- gcc/omp-low.cc | 2 +- gcc/testsuite/g++.dg/gomp/pr113436-2.C | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/gomp/pr113436-2.C 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" } }