[clang] d597452 - [OpenMP] Fix crash with invalid argument to simd collapse (#139313)
via cfe-commits
cfe-commits at lists.llvm.org
Mon May 12 05:04:25 PDT 2025
Author: Aaron Ballman
Date: 2025-05-12T08:04:22-04:00
New Revision: d5974524de6d7bccb95a1b3f074d1b6b76b60497
URL: https://github.com/llvm/llvm-project/commit/d5974524de6d7bccb95a1b3f074d1b6b76b60497
DIFF: https://github.com/llvm/llvm-project/commit/d5974524de6d7bccb95a1b3f074d1b6b76b60497.diff
LOG: [OpenMP] Fix crash with invalid argument to simd collapse (#139313)
Same as with other recent crash fixes, this is checking whether the
argument expression contains errors or not.
Fixes #138493
Added:
Modified:
clang/docs/ReleaseNotes.rst
clang/lib/Sema/SemaOpenMP.cpp
clang/test/OpenMP/simd_collapse_messages.cpp
Removed:
################################################################################
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index e362ec595a3bb..257c4696de403 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -920,6 +920,8 @@ OpenMP Support
``partial`` was an invalid expression. (#GH139267)
- Fixed a crashing bug with ``omp tile sizes`` if the argument to ``sizes`` was
an invalid expression. (#GH139073)
+- Fixed a crashing bug with ``omp simd collapse`` if the argument to
+ ``collapse`` was an invalid expression. (#GH138493)
- Fixed a crashing bug with ``omp distribute dist_schedule`` if the argument to
``dist_schedule`` was not strictly positive. (#GH139266)
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index 15d568fcb9cc4..9d02594afd551 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -9648,6 +9648,13 @@ checkOpenMPLoop(OpenMPDirectiveKind DKind, Expr *CollapseLoopCountExpr,
DSAStackTy &DSA,
SemaOpenMP::VarsWithInheritedDSAType &VarsWithImplicitDSA,
OMPLoopBasedDirective::HelperExprs &Built) {
+ // If either of the loop expressions exist and contain errors, we bail out
+ // early because diagnostics have already been emitted and we can't reliably
+ // check more about the loop.
+ if ((CollapseLoopCountExpr && CollapseLoopCountExpr->containsErrors()) ||
+ (OrderedLoopCountExpr && OrderedLoopCountExpr->containsErrors()))
+ return 0;
+
unsigned NestedLoopCount = 1;
bool SupportsNonPerfectlyNested = (SemaRef.LangOpts.OpenMP >= 50) &&
!isOpenMPLoopTransformationDirective(DKind);
diff --git a/clang/test/OpenMP/simd_collapse_messages.cpp b/clang/test/OpenMP/simd_collapse_messages.cpp
index 1ce3bef3535ce..d74033dcddc8d 100644
--- a/clang/test/OpenMP/simd_collapse_messages.cpp
+++ b/clang/test/OpenMP/simd_collapse_messages.cpp
@@ -97,3 +97,12 @@ int main(int argc, char **argv) {
return tmain<int, char, 1, 0>(argc, argv);
}
+namespace GH138493 {
+void f(void) {
+ // This would previously crash when processing an invalid expression as an
+ // argument to collapse.
+#pragma omp simd collapse(a) // expected-error {{use of undeclared identifier 'a'}}
+ for (int i = 0; i < 10; i++)
+ ;
+}
+} // namespace GH138493
More information about the cfe-commits
mailing list