tbaeder created this revision. tbaeder added reviewers: aaron.ballman, erichkeane, tahonermann, shafik. Herald added a project: All. tbaeder requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D137399 Files: clang/lib/AST/Interp/ByteCodeExprGen.cpp Index: clang/lib/AST/Interp/ByteCodeExprGen.cpp =================================================================== --- clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -1518,6 +1518,13 @@ // The Inv doesn't change anything, so skip it if we don't need the result. return DiscardResult ? this->emitPop(*T, E) : this->emitInvBool(E); case UO_Minus: // -x + // Emit negated integers directly. + if (const auto *IL = dyn_cast<IntegerLiteral>(SubExpr)) { + if (DiscardResult) + return true; + APSInt V = APSInt(IL->getValue(), /*IsUnsigned=*/false); + return this->emitConst(-V, E); + } if (!this->visit(SubExpr)) return false; return DiscardResult ? this->emitPop(*T, E) : this->emitNeg(*T, E);
Index: clang/lib/AST/Interp/ByteCodeExprGen.cpp =================================================================== --- clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -1518,6 +1518,13 @@ // The Inv doesn't change anything, so skip it if we don't need the result. return DiscardResult ? this->emitPop(*T, E) : this->emitInvBool(E); case UO_Minus: // -x + // Emit negated integers directly. + if (const auto *IL = dyn_cast<IntegerLiteral>(SubExpr)) { + if (DiscardResult) + return true; + APSInt V = APSInt(IL->getValue(), /*IsUnsigned=*/false); + return this->emitConst(-V, E); + } if (!this->visit(SubExpr)) return false; return DiscardResult ? this->emitPop(*T, E) : this->emitNeg(*T, E);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits