From: John McCall Date: Thu, 16 Sep 2010 03:13:23 +0000 (+0000) Subject: Initialize AggValueSlot's flags along all paths, plus minor beautification. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d1a5f13140a5bfcf9107b28de906518d2313fdf0;p=clang Initialize AggValueSlot's flags along all paths, plus minor beautification. Prospective fix for broken commit in r114045. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114060 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp index d28071197c..bd773f2dad 100644 --- a/lib/CodeGen/CGExprAgg.cpp +++ b/lib/CodeGen/CGExprAgg.cpp @@ -39,7 +39,7 @@ class AggExprEmitter : public StmtVisitor { // If the destination slot requires garbage collection, we can't // use the real return value slot, because we have to use the GC // API. - if (Dest.isRequiresGCollection()) return ReturnValueSlot(); + if (Dest.requiresGCollection()) return ReturnValueSlot(); return ReturnValueSlot(Dest.getAddr(), Dest.isVolatile()); } @@ -177,7 +177,7 @@ bool AggExprEmitter::TypeRequiresGCollection(QualType T) { /// directly into the return value slot. If GC does interfere, a final /// move will be performed. void AggExprEmitter::EmitGCMove(const Expr *E, RValue Src) { - if (Dest.isRequiresGCollection()) { + if (Dest.requiresGCollection()) { std::pair TypeInfo = CGF.getContext().getTypeInfo(E->getType()); unsigned long size = TypeInfo.first/8; @@ -210,7 +210,7 @@ void AggExprEmitter::EmitFinalDestCopy(const Expr *E, RValue Src, bool Ignore) { Dest = CGF.CreateAggTemp(E->getType(), "agg.tmp"); } - if (Dest.isRequiresGCollection()) { + if (Dest.requiresGCollection()) { std::pair TypeInfo = CGF.getContext().getTypeInfo(E->getType()); unsigned long size = TypeInfo.first/8; diff --git a/lib/CodeGen/CGValue.h b/lib/CodeGen/CGValue.h index fa4cb3db04..04467c564f 100644 --- a/lib/CodeGen/CGValue.h +++ b/lib/CodeGen/CGValue.h @@ -347,14 +347,16 @@ public: /// \param LifetimeExternallyManaged - true if the slot's lifetime /// is being externally managed; false if a destructor should be /// registered for any temporaries evaluated into the slot + /// \param RequiresGCollection - true if the slot is located + /// somewhere that ObjC GC calls should be emitted for static AggValueSlot forAddr(llvm::Value *Addr, bool Volatile, bool LifetimeExternallyManaged, bool RequiresGCollection=false) { AggValueSlot AV; AV.AddrAndFlags = reinterpret_cast(Addr); - if (Volatile) AV.VolatileFlag = 1; - if (LifetimeExternallyManaged) AV.LifetimeFlag = 1; - if (RequiresGCollection) AV.RequiresGCollection = 1; + AV.VolatileFlag = Volatile; + AV.LifetimeFlag = LifetimeExternallyManaged; + AV.RequiresGCollection = RequiresGCollection; return AV; } @@ -368,18 +370,18 @@ public: return LifetimeFlag; } void setLifetimeExternallyManaged() { - LifetimeFlag = 1; + LifetimeFlag = true; } bool isVolatile() const { return VolatileFlag; } - bool isRequiresGCollection() const { + bool requiresGCollection() const { return RequiresGCollection; } void setRequiresGCollection() { - RequiresGCollection = 1; + RequiresGCollection = true; } llvm::Value *getAddr() const {