]> granicus.if.org Git - clang/commitdiff
Honor ByVal alignment. Patch by Nate Begeman!
authorDaniel Dunbar <daniel@zuster.org>
Thu, 5 Feb 2009 01:31:19 +0000 (01:31 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 5 Feb 2009 01:31:19 +0000 (01:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63811 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGCall.cpp

index 61c6653236df20aba4289794be507c8d06cf7e01..b0a2f586ea3cca0bc182fcc06ef49889dad90499 100644 (file)
@@ -316,6 +316,7 @@ ABIArgInfo X86_32ABIInfo::classifyReturnType(QualType RetTy,
 
 ABIArgInfo X86_32ABIInfo::classifyArgumentType(QualType Ty,
                                               ASTContext &Context) const {
+  // FIXME: Set alignment on byval arguments.
   if (CodeGenFunction::hasAggregateLLVMType(Ty)) {
     // Structures with flexible arrays are always byval.
     if (const RecordType *RT = Ty->getAsStructureType())
@@ -1066,7 +1067,6 @@ CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI, bool IsVariadic) {
     case ABIArgInfo::ByVal:
       // byval arguments are always on the stack, which is addr space #0.
       ArgTys.push_back(llvm::PointerType::getUnqual(Ty));
-      assert(AI.getByValAlignment() == 0 && "FIXME: alignment unhandled");
       break;
       
     case ABIArgInfo::Direct:
@@ -1146,7 +1146,8 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
 
     case ABIArgInfo::ByVal:
       Attributes |= llvm::Attribute::ByVal;
-      assert(AI.getByValAlignment() == 0 && "FIXME: alignment unhandled");
+      Attributes |= 
+        llvm::Attribute::constructAlignmentFromInt(AI.getByValAlignment());
       break;
       
     case ABIArgInfo::Direct: