From aef0bf4f6c2372a62badbbf52d9ed6deaa153997 Mon Sep 17 00:00:00 2001 From: Sunil Kuravinakop Date: Fri, 14 Nov 2025 13:56:24 -0600 Subject: [PATCH] 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