]> granicus.if.org Git - clang/commitdiff
Switch the Alignment argument on AggValueSlot over to CharUnits, per John's review...
authorEli Friedman <eli.friedman@gmail.com>
Sat, 3 Dec 2011 02:13:40 +0000 (02:13 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sat, 3 Dec 2011 02:13:40 +0000 (02:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145741 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGClass.cpp
lib/CodeGen/CGException.cpp
lib/CodeGen/CGExpr.cpp
lib/CodeGen/CGExprCXX.cpp
lib/CodeGen/CGStmt.cpp
lib/CodeGen/CGValue.h
lib/CodeGen/CodeGenFunction.h

index b3d41fca9c3856706ce48ec3ab710cbb0bed9e26..eabc201cc47155e41a56a654ddaae6452a8b492e 100644 (file)
@@ -397,8 +397,7 @@ static void EmitBaseInitializer(CodeGenFunction &CGF,
     CGF.GetAddressOfDirectBaseInCompleteClass(ThisPtr, ClassDecl,
                                               BaseClassDecl,
                                               isBaseVirtual);
-  unsigned Alignment =
-    CGF.getContext().getTypeAlignInChars(BaseType).getQuantity();
+  CharUnits Alignment = CGF.getContext().getTypeAlignInChars(BaseType);
   AggValueSlot AggSlot =
     AggValueSlot::forAddr(V, Alignment, Qualifiers(),
                           AggValueSlot::IsDestructed,
@@ -1345,7 +1344,7 @@ CodeGenFunction::EmitDelegatingCXXConstructorCall(const CXXConstructorDecl *Ctor
   llvm::Value *ThisPtr = LoadCXXThis();
 
   QualType Ty = getContext().getTagDeclType(Ctor->getParent());
-  unsigned Alignment = getContext().getTypeAlignInChars(Ty).getQuantity();
+  CharUnits Alignment = getContext().getTypeAlignInChars(Ty);
   AggValueSlot AggSlot =
     AggValueSlot::forAddr(ThisPtr, Alignment, Qualifiers(),
                           AggValueSlot::IsDestructed,
index 3a7b4d4107b78b5a72294a801ee86aab6d45c021..5b5d8b4f0239e741984b7072219f14f983d92354 100644 (file)
@@ -1039,7 +1039,7 @@ static void InitCatchParam(CodeGenFunction &CGF,
   CGF.EHStack.pushTerminate();
 
   // Perform the copy construction.
-  unsigned Alignment = CGF.getContext().getDeclAlign(&CatchParam).getQuantity();
+  CharUnits Alignment = CGF.getContext().getDeclAlign(&CatchParam);
   CGF.EmitAggExpr(copyExpr,
                   AggValueSlot::forAddr(ParamAddr, Alignment, Qualifiers(),
                                         AggValueSlot::IsNotDestructed,
index d5273053862b2fd5ad170b689288ffa51dbbd336..a8c134b2ae83d704c9f9f79c55390792c54f70c7 100644 (file)
@@ -139,8 +139,7 @@ void CodeGenFunction::EmitAnyExprToMem(const Expr *E,
   if (E->getType()->isAnyComplexType()) {
     EmitComplexExprIntoAddr(E, Location, Quals.hasVolatile());
   } else if (hasAggregateLLVMType(E->getType())) {
-    unsigned Alignment =
-        getContext().getTypeAlignInChars(E->getType()).getQuantity();
+    CharUnits Alignment = getContext().getTypeAlignInChars(E->getType());
     EmitAggExpr(E, AggValueSlot::forAddr(Location, Alignment, Quals,
                                          AggValueSlot::IsDestructed_t(IsInit),
                                          AggValueSlot::DoesNotNeedGCBarriers,
@@ -361,8 +360,7 @@ EmitExprForReferenceBinding(CodeGenFunction &CGF, const Expr *E,
         !E->getType()->isAnyComplexType()) {
       ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(), 
                                                     InitializedDecl);
-      unsigned Alignment =
-        CGF.getContext().getTypeAlignInChars(E->getType()).getQuantity();
+      CharUnits Alignment = CGF.getContext().getTypeAlignInChars(E->getType());
       AggValueSlot::IsDestructed_t isDestructed
         = AggValueSlot::IsDestructed_t(InitializedDecl != 0);
       AggSlot = AggValueSlot::forAddr(ReferenceTemporary, Alignment,
index e3afda62d4e9b733c1395f674cf7b0274c03f9f6..da1ca2ccf3f350853c6686c3fc158d7108a97809 100644 (file)
@@ -750,10 +750,10 @@ static void StoreAnyExprIntoOneUnit(CodeGenFunction &CGF, const CXXNewExpr *E,
   const Expr *Init = E->getConstructorArg(0);
   QualType AllocType = E->getAllocatedType();
 
-  unsigned Alignment =
-    CGF.getContext().getTypeAlignInChars(AllocType).getQuantity();
+  CharUnits Alignment = CGF.getContext().getTypeAlignInChars(AllocType);
   if (!CGF.hasAggregateLLVMType(AllocType))
-    CGF.EmitScalarInit(Init, 0, CGF.MakeAddrLValue(NewPtr, AllocType, Alignment),
+    CGF.EmitScalarInit(Init, 0, CGF.MakeAddrLValue(NewPtr, AllocType,
+                                                   Alignment.getQuantity()),
                        false);
   else if (AllocType->isAnyComplexType())
     CGF.EmitComplexExprIntoAddr(Init, NewPtr, 
index adc0094e611fda1675ebc83e422ad70a07410d97..594281d15e88a3d43e697659bfb4a0921e8d2f9e 100644 (file)
@@ -772,8 +772,7 @@ void CodeGenFunction::EmitReturnStmt(const ReturnStmt &S) {
   } else if (RV->getType()->isAnyComplexType()) {
     EmitComplexExprIntoAddr(RV, ReturnValue, false);
   } else {
-    unsigned Alignment =
-        getContext().getTypeAlignInChars(RV->getType()).getQuantity();
+    CharUnits Alignment = getContext().getTypeAlignInChars(RV->getType());
     EmitAggExpr(RV, AggValueSlot::forAddr(ReturnValue, Alignment, Qualifiers(),
                                           AggValueSlot::IsDestructed,
                                           AggValueSlot::DoesNotNeedGCBarriers,
index e507e718660c15d0831e927db95d375241a681b2..c83000bb978357cd10c5a9324ffe616b7b331d79 100644 (file)
@@ -16,6 +16,7 @@
 #define CLANG_CODEGEN_CGVALUE_H
 
 #include "clang/AST/ASTContext.h"
+#include "clang/AST/CharUnits.h"
 #include "clang/AST/Type.h"
 
 namespace llvm {
@@ -366,7 +367,7 @@ public:
   ///   for calling destructors on this object
   /// \param needsGC - true if the slot is potentially located
   ///   somewhere that ObjC GC calls should be emitted for
-  static AggValueSlot forAddr(llvm::Value *addr, unsigned align,
+  static AggValueSlot forAddr(llvm::Value *addr, CharUnits align,
                               Qualifiers quals,
                               IsDestructed_t isDestructed,
                               NeedsGCBarriers_t needsGC,
@@ -374,7 +375,7 @@ public:
                               IsZeroed_t isZeroed = IsNotZeroed) {
     AggValueSlot AV;
     AV.Addr = addr;
-    AV.Alignment = align;
+    AV.Alignment = align.getQuantity();
     AV.Quals = quals;
     AV.DestructedFlag = isDestructed;
     AV.ObjCGCFlag = needsGC;
@@ -387,8 +388,8 @@ public:
                                 NeedsGCBarriers_t needsGC,
                                 IsAliased_t isAliased,
                                 IsZeroed_t isZeroed = IsNotZeroed) {
-    return forAddr(LV.getAddress(), LV.getAlignment(), LV.getQuals(),
-                   isDestructed, needsGC, isAliased, isZeroed);
+    return forAddr(LV.getAddress(), CharUnits::fromQuantity(LV.getAlignment()),
+                   LV.getQuals(), isDestructed, needsGC, isAliased, isZeroed);
   }
 
   IsDestructed_t isExternallyDestructed() const {
@@ -420,8 +421,8 @@ public:
     return Addr == 0;
   }
 
-  unsigned getAlignment() const {
-    return Alignment;
+  CharUnits getAlignment() const {
+    return CharUnits::fromQuantity(Alignment);
   }
 
   IsAliased_t isPotentiallyAliased() const {
index 39a0bfc2f1ec050a7102c494e68727de65bc4c47..74f48c3d805d46778c2fb91518b4ef47db886a6b 100644 (file)
@@ -1574,7 +1574,7 @@ public:
   /// CreateAggTemp - Create a temporary memory object for the given
   /// aggregate type.
   AggValueSlot CreateAggTemp(QualType T, const Twine &Name = "tmp") {
-    unsigned Alignment = getContext().getTypeAlignInChars(T).getQuantity();
+    CharUnits Alignment = getContext().getTypeAlignInChars(T);
     return AggValueSlot::forAddr(CreateMemTemp(T, Name), Alignment,
                                  T.getQualifiers(),
                                  AggValueSlot::IsNotDestructed,