Skip to content

Commit 131c8f8

Browse files
authored
[OpenMP] Fix crash with invalid size expression (#139745)
We weren't correctly handling size expressions with errors before trying to get the type of the size expression. No release note needed because support for 'stripe' was added to the current release. Fixes #139433
1 parent 23f6358 commit 131c8f8

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

clang/lib/Sema/SemaOpenMP.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14551,7 +14551,10 @@ StmtResult SemaOpenMP::ActOnOpenMPStripeDirective(ArrayRef<OMPClause *> Clauses,
1455114551

1455214552
const auto *SizesClause =
1455314553
OMPExecutableDirective::getSingleClause<OMPSizesClause>(Clauses);
14554-
if (!SizesClause || llvm::is_contained(SizesClause->getSizesRefs(), nullptr))
14554+
if (!SizesClause ||
14555+
llvm::any_of(SizesClause->getSizesRefs(), [](const Expr *SizeExpr) {
14556+
return !SizeExpr || SizeExpr->containsErrors();
14557+
}))
1455514558
return StmtError();
1455614559
unsigned NumLoops = SizesClause->getNumSizes();
1455714560

clang/test/OpenMP/stripe_messages.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,3 +161,11 @@ void template_inst() {
161161
// expected-note@+1 {{in instantiation of function template specialization 'templated_func_type_dependent<int>' requested here}}
162162
templated_func_type_dependent<int>();
163163
}
164+
165+
namespace GH139433 {
166+
void f() {
167+
#pragma omp stripe sizes(a) // expected-error {{use of undeclared identifier 'a'}}
168+
for (int i = 0; i < 10; i++)
169+
;
170+
}
171+
} // namespace GH139433

0 commit comments

Comments
 (0)