https://github.com/SunilKuravinakop created https://github.com/llvm/llvm-project/pull/168846
Same changes as in fix for https://github.com/llvm/llvm-project/pull/165276 except for changes in test case : 1) remove unnecessary include in test to restore Ubuntu build. This is not needed as allocatable modifier is not applicable to the default clause in C/C++. 2) Changes in CHECK statements to accommodate testing failure on toolchain builders at Google, Reported by Prabhu Rajasekaran. >From aef0bf4f6c2372a62badbbf52d9ed6deaa153997 Mon Sep 17 00:00:00 2001 From: Sunil Kuravinakop <[email protected]> Date: Fri, 14 Nov 2025 13:56:24 -0600 Subject: [PATCH 1/2] Same changes as in fix for 165276 except for remove unnecessary include in test to restore Ubuntu build. This is not needed as allocatable modifier is not applicable to the default clause in C/C++. --- clang/lib/Sema/SemaOpenMP.cpp | 6 +- ...allel_default_variableCategory_codegen.cpp | 91 +++++++++++++++++++ 2 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 clang/test/OpenMP/parallel_default_variableCategory_codegen.cpp diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 81c591a00cfc6..31c8f0cd30c56 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -1364,15 +1364,15 @@ DSAStackTy::DSAVarData DSAStackTy::getDSA(const_iterator &Iter, DefaultDataSharingAttributes IterDA = Iter->DefaultAttr; switch (Iter->DefaultVCAttr) { case DSA_VC_aggregate: - if (!VD->getType()->isAggregateType()) + if (!D->getType()->isAggregateType()) IterDA = DSA_none; break; case DSA_VC_pointer: - if (!VD->getType()->isPointerType()) + if (!D->getType()->isPointerType()) IterDA = DSA_none; break; case DSA_VC_scalar: - if (!VD->getType()->isScalarType()) + if (!D->getType()->isScalarType()) IterDA = DSA_none; break; case DSA_VC_all: diff --git a/clang/test/OpenMP/parallel_default_variableCategory_codegen.cpp b/clang/test/OpenMP/parallel_default_variableCategory_codegen.cpp new file mode 100644 index 0000000000000..ffafc9a9410b7 --- /dev/null +++ b/clang/test/OpenMP/parallel_default_variableCategory_codegen.cpp @@ -0,0 +1,91 @@ +// RUN: %clangxx -Xclang -verify -Wno-vla -fopenmp -fopenmp-version=60 -x c++ -S -emit-llvm %s -o - | FileCheck %s +// expected-no-diagnostics +#ifndef HEADER +#define HEADER + +int global; +#define VECTOR_SIZE 4 + +int main (int argc, char **argv) { + int i,n; + int x; + + n = VECTOR_SIZE; + + #pragma omp parallel masked firstprivate(x) num_threads(2) + { + int *xPtr = nullptr; + // scalar + #pragma omp task default(shared:scalar) + { + xPtr = &x; + } + #pragma omp taskwait + + // pointer + #pragma omp task default(shared:pointer) shared(x) + { + xPtr = &x; + } + #pragma omp taskwait + } + + int *aggregate[VECTOR_SIZE] = {0,0,0,0}; + + #pragma omp parallel masked num_threads(2) + { + // aggregate + #pragma omp task default(shared:aggregate) + for(i=0;i<n;i++) { + aggregate[i] = &x; + } + #pragma omp taskwait + + #pragma omp task default(shared:aggregate) shared(x) + for(i=0;i<n;i++) { + aggregate[i] = &x; + } + #pragma omp taskwait + + // all + #pragma omp task default(shared:all) + for(i=0;i<n;i++) { + aggregate[i] = &x; + } + #pragma omp taskwait + } +} + +#endif + +// CHECK-LABEL: define {{.*}}main.omp_outlined{{.*}} +// CHECK-NEXT: entry: +// CHECK: %x.addr = alloca{{.*}} +// CHECK: %xPtr = alloca{{.*}} +// CHECK: store ptr null, ptr %xPtr{{.*}} +// CHECK: store ptr %xPtr{{.*}} +// CHECK: store ptr %x.addr{{.*}} +// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} +// CHECK: ret void +// +// CHECK: define {{.*}}main.omp_outlined{{.*}} +// CHECK-NEXT: entry: +// CHECK-DAG: %i.addr = alloca{{.*}} +// CHECK-DAG: %n.addr = alloca{{.*}} +// CHECK-DAG: %aggregate.addr = alloca{{.*}} +// CHECK-DAG: %x.addr = alloca{{.*}} +// CHECK: [[TMP0:%.*]] = load{{.*}}%i.addr{{.*}} +// CHECK-NEXT: [[TMP1:%.*]] = load{{.*}}%n.addr{{.*}} +// CHECK-NEXT: [[TMP2:%.*]] = load{{.*}}%aggregate.addr{{.*}} +// CHECK-NEXT: [[TMP3:%.*]] = load{{.*}}%x.addr{{.*}} +// CHECK: store ptr [[TMP2]]{{.*}} +// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} +// CHECK: store ptr [[TMP2]]{{.*}} +// CHECK: store ptr [[TMP3]]{{.*}} +// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} +// CHECK: store ptr [[TMP0]]{{.*}} +// CHECK: store ptr [[TMP1]]{{.*}} +// CHECK: store ptr [[TMP2]]{{.*}} +// CHECK: store ptr [[TMP3]]{{.*}} +// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} +// CHECK: ret void >From 66a9e86b80533128a2872abcf9cb752ebb04e8a6 Mon Sep 17 00:00:00 2001 From: Sunil Kuravinakop <[email protected]> Date: Thu, 20 Nov 2025 02:49:36 -0600 Subject: [PATCH 2/2] Changes in CHECK statements to accommodate testing failure on toolchain builders at Google, Reported by Prabhu Rajasekaran. --- ...allel_default_variableCategory_codegen.cpp | 47 +++++++++---------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/clang/test/OpenMP/parallel_default_variableCategory_codegen.cpp b/clang/test/OpenMP/parallel_default_variableCategory_codegen.cpp index ffafc9a9410b7..e94d590933c85 100644 --- a/clang/test/OpenMP/parallel_default_variableCategory_codegen.cpp +++ b/clang/test/OpenMP/parallel_default_variableCategory_codegen.cpp @@ -59,33 +59,28 @@ int main (int argc, char **argv) { #endif // CHECK-LABEL: define {{.*}}main.omp_outlined{{.*}} -// CHECK-NEXT: entry: -// CHECK: %x.addr = alloca{{.*}} -// CHECK: %xPtr = alloca{{.*}} -// CHECK: store ptr null, ptr %xPtr{{.*}} -// CHECK: store ptr %xPtr{{.*}} -// CHECK: store ptr %x.addr{{.*}} -// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} +// CHECK: store ptr null, ptr{{.*}} +// CHECK-NEXT: {{.*}}getelementptr {{.*}} +// CHECK-NEXT: store ptr {{.*}} +// CHECK-NEXT: {{.*}}getelementptr {{.*}} +// CHECK-NEXT: store ptr {{.*}} +// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} // CHECK: ret void // // CHECK: define {{.*}}main.omp_outlined{{.*}} -// CHECK-NEXT: entry: -// CHECK-DAG: %i.addr = alloca{{.*}} -// CHECK-DAG: %n.addr = alloca{{.*}} -// CHECK-DAG: %aggregate.addr = alloca{{.*}} -// CHECK-DAG: %x.addr = alloca{{.*}} -// CHECK: [[TMP0:%.*]] = load{{.*}}%i.addr{{.*}} -// CHECK-NEXT: [[TMP1:%.*]] = load{{.*}}%n.addr{{.*}} -// CHECK-NEXT: [[TMP2:%.*]] = load{{.*}}%aggregate.addr{{.*}} -// CHECK-NEXT: [[TMP3:%.*]] = load{{.*}}%x.addr{{.*}} -// CHECK: store ptr [[TMP2]]{{.*}} -// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} -// CHECK: store ptr [[TMP2]]{{.*}} -// CHECK: store ptr [[TMP3]]{{.*}} -// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} -// CHECK: store ptr [[TMP0]]{{.*}} -// CHECK: store ptr [[TMP1]]{{.*}} -// CHECK: store ptr [[TMP2]]{{.*}} -// CHECK: store ptr [[TMP3]]{{.*}} -// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} +// CHECK: {{.*}}getelementptr {{.*}} +// CHECK-NEXT: store ptr {{.*}} +// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} +// CHECK: store ptr {{.*}} +// CHECK-NEXT: {{.*}}getelementptr {{.*}} +// CHECK-NEXT: store ptr {{.*}} +// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} +// CHECK: store ptr {{.*}} +// CHECK-NEXT: {{.*}}getelementptr {{.*}} +// CHECK-NEXT: store ptr {{.*}} +// CHECK-NEXT: {{.*}}getelementptr {{.*}} +// CHECK-NEXT: store ptr {{.*}} +// CHECK-NEXT: {{.*}}getelementptr {{.*}} +// CHECK-NEXT: store ptr {{.*}} +// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}} // CHECK: ret void _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
