Skip to content

[Clang][OpenMP] Return empty QualType when a negative array was created #71552

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 10, 2023

Conversation

lwshanbd
Copy link
Contributor

@lwshanbd lwshanbd commented Nov 7, 2023

Fix #69198

@llvmbot llvmbot added clang Clang issues not falling into any other category clang:frontend Language frontend issues, e.g. anything involving "Sema" clang:openmp OpenMP related changes to Clang labels Nov 7, 2023
@llvmbot
Copy link
Member

llvmbot commented Nov 7, 2023

@llvm/pr-subscribers-clang

Author: Baodi (lwshanbd)

Changes

Fix #69198


Full diff: https://github.com/llvm/llvm-project/pull/71552.diff

3 Files Affected:

  • (modified) clang/lib/AST/Expr.cpp (+3-3)
  • (modified) clang/lib/Sema/SemaOpenMP.cpp (+2)
  • (added) clang/test/OpenMP/bug69198.c (+8)
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index 74a9c49a795b4fc..55c6b732b7081f4 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -4983,10 +4983,10 @@ QualType OMPArraySectionExpr::getBaseOriginalType(const Expr *Base) {
   for (unsigned Cnt = 0; Cnt < ArraySectionCount; ++Cnt) {
     if (OriginalTy->isAnyPointerType())
       OriginalTy = OriginalTy->getPointeeType();
-    else {
-      assert (OriginalTy->isArrayType());
+    else if (OriginalTy->isArrayType())
       OriginalTy = OriginalTy->castAsArrayTypeUnsafe()->getElementType();
-    }
+    else
+      return {};
   }
   return OriginalTy;
 }
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index e05fa54d8118319..dcdd6e7a3f5c762 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -21014,6 +21014,8 @@ Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data,
           if (OASE) {
             QualType BaseType =
                 OMPArraySectionExpr::getBaseOriginalType(OASE->getBase());
+            if (BaseType.isNull())
+              return nullptr;
             if (const auto *ATy = BaseType->getAsArrayTypeUnsafe())
               ExprTy = ATy->getElementType();
             else
diff --git a/clang/test/OpenMP/bug69198.c b/clang/test/OpenMP/bug69198.c
new file mode 100644
index 000000000000000..ca80d994ea051b0
--- /dev/null
+++ b/clang/test/OpenMP/bug69198.c
@@ -0,0 +1,8 @@
+// RUN: %clang_cc1 -verify -fopenmp -x c -triple x86_64-apple-darwin10 %s
+// expected-no-diagnostics
+
+int c[-1];
+
+void foo (){
+  #pragma omp task depend(inout: c[:][:])
+}

@lwshanbd lwshanbd changed the title Return null expr when a negative array was created. [Clang][OpenMP]Return null expr when a negative array was created. Nov 7, 2023
@lwshanbd lwshanbd changed the title [Clang][OpenMP]Return null expr when a negative array was created. [Clang][OpenMP]Return empty QualType when a negative array was created. Nov 8, 2023
@shiltian shiltian changed the title [Clang][OpenMP]Return empty QualType when a negative array was created. [Clang][OpenMP] Return empty QualType when a negative array was created Nov 8, 2023
@shiltian
Copy link
Contributor

shiltian commented Nov 9, 2023

The changes look good to me. @alexey-bataev WDYT?

@shiltian shiltian merged commit df2725f into llvm:main Nov 10, 2023
zahiraam pushed a commit to zahiraam/llvm-project that referenced this pull request Nov 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" clang:openmp OpenMP related changes to Clang clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Clang][OpenMP] Assertion `OriginalTy->isArrayType()' failed.
4 participants