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  <kcyeung@baylibre.com>

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.
This commit is contained in:
Kwok Cheung Yeung
2026-02-20 16:07:45 +00:00
parent cdc4d4ada2
commit 92325afa25
2 changed files with 18 additions and 1 deletions

View File

@@ -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);

View File

@@ -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" } }