Author: Timm Bäder Date: 2023-08-01T12:14:20+02:00 New Revision: 0d2e9b6e4627c3c9f4956b212c761248f18f6eae
URL: https://github.com/llvm/llvm-project/commit/0d2e9b6e4627c3c9f4956b212c761248f18f6eae DIFF: https://github.com/llvm/llvm-project/commit/0d2e9b6e4627c3c9f4956b212c761248f18f6eae.diff LOG: [clang][Interp][NFC] Ignore ArraySubScriptExpr like the other exprs Instead of evaluating the entire thing and then pop'ing the value from the stack, just pass the discard() on. Added: Modified: clang/lib/AST/Interp/ByteCodeExprGen.cpp clang/test/AST/Interp/literals.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp index 8fbcc9ae3eec98..79b0a3857d075c 100644 --- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -445,7 +445,9 @@ bool ByteCodeExprGen<Emitter>::VisitArraySubscriptExpr( const ArraySubscriptExpr *E) { const Expr *Base = E->getBase(); const Expr *Index = E->getIdx(); - PrimType IndexT = classifyPrim(Index->getType()); + + if (DiscardResult) + return this->discard(Base) && this->discard(Index); // Take pointer of LHS, add offset from RHS. // What's left on the stack after this is a pointer. @@ -455,13 +457,8 @@ bool ByteCodeExprGen<Emitter>::VisitArraySubscriptExpr( if (!this->visit(Index)) return false; - if (!this->emitArrayElemPtrPop(IndexT, E)) - return false; - - if (DiscardResult) - return this->emitPopPtr(E); - - return true; + PrimType IndexT = classifyPrim(Index->getType()); + return this->emitArrayElemPtrPop(IndexT, E); } template <class Emitter> diff --git a/clang/test/AST/Interp/literals.cpp b/clang/test/AST/Interp/literals.cpp index d4ade51b1d71c3..b8467b86c4c906 100644 --- a/clang/test/AST/Interp/literals.cpp +++ b/clang/test/AST/Interp/literals.cpp @@ -899,6 +899,8 @@ namespace DiscardExprs { (int){1}; (int[]){1,2,3}; + int arr[] = {1,2,3}; + arr[0]; return 0; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits