https://github.com/tbaederr created https://github.com/llvm/llvm-project/pull/126511
None >From 8efb8e1a4cad3e5499164741634c4c8c3ad315af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbae...@redhat.com> Date: Mon, 10 Feb 2025 13:56:18 +0100 Subject: [PATCH] [clang][bytecode][NFC] Discard all CastExprs uniformly --- clang/lib/AST/ByteCode/Compiler.cpp | 45 +++-------------------------- 1 file changed, 4 insertions(+), 41 deletions(-) diff --git a/clang/lib/AST/ByteCode/Compiler.cpp b/clang/lib/AST/ByteCode/Compiler.cpp index 1f0e022edcd7687..fdad4cf45693de8 100644 --- a/clang/lib/AST/ByteCode/Compiler.cpp +++ b/clang/lib/AST/ByteCode/Compiler.cpp @@ -194,12 +194,12 @@ template <class Emitter> class StmtExprScope final { template <class Emitter> bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { const Expr *SubExpr = CE->getSubExpr(); - switch (CE->getCastKind()) { - case CK_LValueToRValue: { - if (DiscardResult) - return this->discard(SubExpr); + if (DiscardResult) + return this->delegate(SubExpr); + switch (CE->getCastKind()) { + case CK_LValueToRValue: { std::optional<PrimType> SubExprT = classify(SubExpr->getType()); // Prepare storage for the result. if (!Initializing && !SubExprT) { @@ -253,9 +253,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { case CK_UncheckedDerivedToBase: case CK_DerivedToBase: { - if (DiscardResult) - return this->discard(SubExpr); - if (!this->delegate(SubExpr)) return false; @@ -285,9 +282,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { } case CK_BaseToDerived: { - if (DiscardResult) - return this->discard(SubExpr); - if (!this->delegate(SubExpr)) return false; @@ -302,8 +296,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { if (!SubExpr->getType()->isFloatingType() || !CE->getType()->isFloatingType()) return false; - if (DiscardResult) - return this->discard(SubExpr); if (!this->visit(SubExpr)) return false; const auto *TargetSemantics = &Ctx.getFloatSemantics(CE->getType()); @@ -311,8 +303,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { } case CK_IntegralToFloating: { - if (DiscardResult) - return this->discard(SubExpr); std::optional<PrimType> FromT = classify(SubExpr->getType()); if (!FromT) return false; @@ -327,8 +317,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { case CK_FloatingToBoolean: case CK_FloatingToIntegral: { - if (DiscardResult) - return this->discard(SubExpr); std::optional<PrimType> ToT = classify(CE->getType()); @@ -352,9 +340,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { case CK_NullToMemberPointer: { if (!this->discard(SubExpr)) return false; - if (DiscardResult) - return true; - const Descriptor *Desc = nullptr; const QualType PointeeType = CE->getType()->getPointeeType(); if (!PointeeType.isNull()) { @@ -371,9 +356,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { } case CK_PointerToIntegral: { - if (DiscardResult) - return this->discard(SubExpr); - if (!this->visit(SubExpr)) return false; @@ -399,8 +381,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { return false; if (!this->emitArrayDecay(CE)) return false; - if (DiscardResult) - return this->emitPopPtr(CE); return true; } @@ -412,9 +392,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { // FIXME: I think the discard is wrong since the int->ptr cast might cause a // diagnostic. PrimType T = classifyPrim(IntType); - if (DiscardResult) - return this->emitPop(T, CE); - QualType PtrType = CE->getType(); const Descriptor *Desc; if (std::optional<PrimType> T = classify(PtrType->getPointeeType())) @@ -454,10 +431,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { return false; return this->emitInvalidCast(CastKind::Reinterpret, /*Fatal=*/true, CE); } - - if (DiscardResult) - return this->discard(SubExpr); - QualType SubExprTy = SubExpr->getType(); std::optional<PrimType> FromT = classify(SubExprTy); // Casts from integer/vector to vector. @@ -493,8 +466,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { case CK_FixedPointToBoolean: case CK_BooleanToSignedIntegral: case CK_IntegralCast: { - if (DiscardResult) - return this->discard(SubExpr); std::optional<PrimType> FromT = classify(SubExpr->getType()); std::optional<PrimType> ToT = classify(CE->getType()); @@ -546,8 +517,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { case CK_IntegralComplexToBoolean: case CK_FloatingComplexToBoolean: { - if (DiscardResult) - return this->discard(SubExpr); if (!this->visit(SubExpr)) return false; return this->emitComplexBoolCast(SubExpr); @@ -585,9 +554,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { case CK_FloatingComplexToIntegralComplex: { assert(CE->getType()->isAnyComplexType()); assert(SubExpr->getType()->isAnyComplexType()); - if (DiscardResult) - return this->discard(SubExpr); - if (!Initializing) { std::optional<unsigned> LocalIndex = allocateLocal(CE); if (!LocalIndex) @@ -633,9 +599,6 @@ bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { assert(classify(SubExpr->getType())); assert(CE->getType()->isVectorType()); - if (DiscardResult) - return this->discard(SubExpr); - if (!Initializing) { std::optional<unsigned> LocalIndex = allocateLocal(CE); if (!LocalIndex) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits