Cleanp code with some recent suggestions.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65285 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index 2de696d..cffa7fa 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -286,15 +286,20 @@
     assert (((Align & 7) == 0)
             && "alignment must be on at least byte boundaries");
     // Ensure proper alignment, even if it means we have to have a gap
-    if (BlockOffset % (Align >> 3)) {
-      BlockOffset += (Align >> 3) - (BlockOffset % (Align >> 3));
-      assert ((BlockOffset % (Align >> 3)) == 0
-              && "alignment calculation is wrong");
-    }
+    BlockOffset = llvm::RoundUpToAlignment(BlockOffset, Align/8);
       
     BlockOffset += Size;
     return BlockOffset-Size;
   }
+  uint64_t getBlockOffset(ValueDecl *D) {
+    uint64_t Size = getContext().getTypeSize(D->getType()) / 8;
+
+    unsigned Align = getContext().getTypeAlign(D->getType());
+    if (const AlignedAttr* AA = D->getAttr<AlignedAttr>())
+        Align = std::max(Align, AA->getAlignment());
+
+    return getBlockOffset(Size, Align);
+  }
   std::map<Decl*, uint64_t> BlockDecls;
 
   void GenerateCode(const FunctionDecl *FD,