Author: Timm Bäder
Date: 2022-11-07T08:37:43+01:00
New Revision: 05a113e18852ab54f22516e9ec1b6aa39adc5b33

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

LOG: [clang][Interp][NFC] Handle discarded ArraySubscriptExprs

This is not exactly a common case, so just pop the pointer at the end if
necessary.

Added: 
    

Modified: 
    clang/lib/AST/Interp/ByteCodeExprGen.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp 
b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
index 5362e9cb1ab0..f3f4ae774886 100644
--- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -319,26 +319,26 @@ bool ByteCodeExprGen<Emitter>::VisitArraySubscriptExpr(
     const ArraySubscriptExpr *E) {
   const Expr *Base = E->getBase();
   const Expr *Index = E->getIdx();
+  PrimType IndexT = classifyPrim(Index->getType());
 
   // Take pointer of LHS, add offset from RHS, narrow result.
   // What's left on the stack after this is a pointer.
-  if (Optional<PrimType> IndexT = classify(Index->getType())) {
-    if (!this->visit(Base))
-      return false;
+  if (!this->visit(Base))
+    return false;
 
-    if (!this->visit(Index))
-      return false;
+  if (!this->visit(Index))
+    return false;
 
-    if (!this->emitAddOffset(*IndexT, E))
-      return false;
+  if (!this->emitAddOffset(IndexT, E))
+    return false;
 
-    if (!this->emitNarrowPtr(E))
-      return false;
+  if (!this->emitNarrowPtr(E))
+    return false;
 
-    return true;
-  }
+  if (DiscardResult)
+    return this->emitPopPtr(E);
 
-  return false;
+  return true;
 }
 
 template <class Emitter>


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

Reply via email to