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