Author: Timm Bäder Date: 2023-10-14T18:43:00+02:00 New Revision: 80737d2ddf05507d96cdd723fb33a6e44ac72a48
URL: https://github.com/llvm/llvm-project/commit/80737d2ddf05507d96cdd723fb33a6e44ac72a48 DIFF: https://github.com/llvm/llvm-project/commit/80737d2ddf05507d96cdd723fb33a6e44ac72a48.diff LOG: [clang][Interp][NFC] Pass PrimType to visitZeroInitializer() This fixes an old FIXME comment. Almost all callers already classify() the type anyway, so just pass the result of that to visitZeroInitializer(). Added: Modified: clang/lib/AST/Interp/ByteCodeExprGen.cpp clang/lib/AST/Interp/ByteCodeExprGen.h Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp index 71aac8c6245c5af..bda9cf1500804f7 100644 --- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -493,8 +493,8 @@ template <class Emitter> bool ByteCodeExprGen<Emitter>::VisitImplicitValueInitExpr(const ImplicitValueInitExpr *E) { QualType QT = E->getType(); - if (classify(QT)) - return this->visitZeroInitializer(QT, E); + if (std::optional<PrimType> T = classify(QT)) + return this->visitZeroInitializer(*T, QT, E); if (QT->isRecordType()) return false; @@ -510,7 +510,7 @@ bool ByteCodeExprGen<Emitter>::VisitImplicitValueInitExpr(const ImplicitValueIni // since we memset our Block*s to 0 and so we have the desired value // without this. for (size_t I = 0; I != NumElems; ++I) { - if (!this->visitZeroInitializer(CAT->getElementType(), E)) + if (!this->visitZeroInitializer(*ElemT, CAT->getElementType(), E)) return false; if (!this->emitInitElem(*ElemT, I, E)) return false; @@ -620,7 +620,7 @@ bool ByteCodeExprGen<Emitter>::VisitInitListExpr(const InitListExpr *E) { if (std::optional<PrimType> T = classify(E->getType())) { assert(!DiscardResult); if (E->getNumInits() == 0) - return this->visitZeroInitializer(E->getType(), E); + return this->visitZeroInitializer(*T, E->getType(), E); assert(E->getNumInits() == 1); return this->delegate(E->inits()[0]); } @@ -1560,7 +1560,8 @@ bool ByteCodeExprGen<Emitter>::VisitOffsetOfExpr(const OffsetOfExpr *E) { template <class Emitter> bool ByteCodeExprGen<Emitter>::VisitCXXScalarValueInitExpr( const CXXScalarValueInitExpr *E) { - return this->visitZeroInitializer(E->getType(), E); + return this->visitZeroInitializer(classifyPrim(E->getType()), E->getType(), + E); } template <class Emitter> bool ByteCodeExprGen<Emitter>::discard(const Expr *E) { @@ -1648,12 +1649,8 @@ bool ByteCodeExprGen<Emitter>::visitBool(const Expr *E) { } template <class Emitter> -bool ByteCodeExprGen<Emitter>::visitZeroInitializer(QualType QT, +bool ByteCodeExprGen<Emitter>::visitZeroInitializer(PrimType T, QualType QT, const Expr *E) { - // FIXME: We need the QualType to get the float semantics, but that means we - // classify it over and over again in array situations. - PrimType T = classifyPrim(QT); - switch (T) { case PT_Bool: return this->emitZeroBool(E); @@ -1699,7 +1696,7 @@ bool ByteCodeExprGen<Emitter>::visitZeroRecordInitializer(const Record *R, if (D->isPrimitive()) { QualType QT = D->getType(); PrimType T = classifyPrim(D->getType()); - if (!this->visitZeroInitializer(QT, E)) + if (!this->visitZeroInitializer(T, QT, E)) return false; if (!this->emitInitField(T, Field.Offset, E)) return false; @@ -1716,7 +1713,7 @@ bool ByteCodeExprGen<Emitter>::visitZeroRecordInitializer(const Record *R, QualType ET = D->getElemQualType(); PrimType T = classifyPrim(ET); for (uint32_t I = 0, N = D->getNumElems(); I != N; ++I) { - if (!this->visitZeroInitializer(ET, E)) + if (!this->visitZeroInitializer(T, ET, E)) return false; if (!this->emitInitElem(T, I, E)) return false; diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.h b/clang/lib/AST/Interp/ByteCodeExprGen.h index 7cfe4d9251c5f05..2049dab140eaaae 100644 --- a/clang/lib/AST/Interp/ByteCodeExprGen.h +++ b/clang/lib/AST/Interp/ByteCodeExprGen.h @@ -222,7 +222,7 @@ class ByteCodeExprGen : public ConstStmtVisitor<ByteCodeExprGen<Emitter>, bool>, friend class SourceLocScope<Emitter>; /// Emits a zero initializer. - bool visitZeroInitializer(QualType QT, const Expr *E); + bool visitZeroInitializer(PrimType T, QualType QT, const Expr *E); bool visitZeroRecordInitializer(const Record *R, const Expr *E); enum class DerefKind { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits