llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Timm Baeder (tbaederr)

<details>
<summary>Changes</summary>

By rejecting them instead of asserting in `classifyPrim()`.

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


2 Files Affected:

- (modified) clang/lib/AST/ByteCode/Compiler.cpp (+6-3) 
- (modified) clang/test/AST/ByteCode/arrays.cpp (+8) 


``````````diff
diff --git a/clang/lib/AST/ByteCode/Compiler.cpp 
b/clang/lib/AST/ByteCode/Compiler.cpp
index 91e0484da0e58..b5745e516174d 100644
--- a/clang/lib/AST/ByteCode/Compiler.cpp
+++ b/clang/lib/AST/ByteCode/Compiler.cpp
@@ -1689,14 +1689,17 @@ bool Compiler<Emitter>::VisitArraySubscriptExpr(const 
ArraySubscriptExpr *E) {
   if (!Success)
     return false;
 
-  PrimType IndexT = classifyPrim(Index->getType());
+  std::optional<PrimType> IndexT = classify(Index->getType());
+  // In error-recovery cases, the index expression has a dependent type.
+  if (!IndexT)
+    return this->emitError(E);
   // If the index is first, we need to change that.
   if (LHS == Index) {
-    if (!this->emitFlip(PT_Ptr, IndexT, E))
+    if (!this->emitFlip(PT_Ptr, *IndexT, E))
       return false;
   }
 
-  return this->emitArrayElemPtrPop(IndexT, E);
+  return this->emitArrayElemPtrPop(*IndexT, E);
 }
 
 template <class Emitter>
diff --git a/clang/test/AST/ByteCode/arrays.cpp 
b/clang/test/AST/ByteCode/arrays.cpp
index 4097c65f7c6fb..9204179ad1a46 100644
--- a/clang/test/AST/ByteCode/arrays.cpp
+++ b/clang/test/AST/ByteCode/arrays.cpp
@@ -654,3 +654,11 @@ namespace ZeroSizeTypes {
                               // both-warning {{subtraction of pointers to 
type 'int[0]' of zero size has undefined behavior}}
   }
 }
+
+namespace InvalidIndex {
+  constexpr int foo(int i) { // both-error {{no return statement in constexpr 
function}}
+    int a[] = {1,2,3};
+    return a[_z]; // both-error {{use of undeclared identifier}}
+  }
+  static_assert(foo(0) == 1, "");
+}

``````````

</details>


https://github.com/llvm/llvm-project/pull/128479
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to