Author: Baodi
Date: 2023-11-09T20:42:59-05:00
New Revision: df2725f3d55ffdc8ca2f9580183956e376a30de7

URL: 
https://github.com/llvm/llvm-project/commit/df2725f3d55ffdc8ca2f9580183956e376a30de7
DIFF: 
https://github.com/llvm/llvm-project/commit/df2725f3d55ffdc8ca2f9580183956e376a30de7.diff

LOG: [Clang][OpenMP] Return empty QualType when a negative array was created 
(#71552)

Fix #69198

Added: 
    clang/test/OpenMP/bug69198.c

Modified: 
    clang/lib/AST/Expr.cpp
    clang/lib/Sema/SemaOpenMP.cpp

Removed: 
    


################################################################################
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..ee88cf15a12380c
--- /dev/null
+++ b/clang/test/OpenMP/bug69198.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -verify -fsyntax-only -fopenmp -x c %s
+
+int c[-1]; // expected-error {{'c' declared as an array with a negative size}}
+
+void foo (){
+  #pragma omp task depend(inout: c[:][:])
+  {
+    c[0] = 1;
+  }
+}


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to