Convert the AttrBuilder into a list of Attributes instead of one Attribute object...
authorBill Wendling <isanbard@gmail.com>
Tue, 29 Jan 2013 01:02:03 +0000 (01:02 +0000)
committerBill Wendling <isanbard@gmail.com>
Tue, 29 Jan 2013 01:02:03 +0000 (01:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173742 91177308-0d34-0410-b5e6-96231b3b80d8

lib/IR/Attributes.cpp

index 0bc926271aeb5f6836bab22a2a9ed66df4e6cac8..d947ffffd8f7101182ab56063e9958320ce61833 100644 (file)
@@ -445,8 +445,21 @@ AttributeSet AttributeSet::get(LLVMContext &C,
 AttributeSet AttributeSet::get(LLVMContext &C, unsigned Idx, AttrBuilder &B) {
   if (!B.hasAttributes())
     return AttributeSet();
-  return get(C, ArrayRef<std::pair<unsigned, Attribute> >(
-               std::make_pair(Idx, Attribute::get(C, B))));
+
+  SmallVector<std::pair<unsigned, Attribute>, 8> Attrs;
+  for (AttrBuilder::iterator I = B.begin(), E = B.end(); I != E; ++I) {
+    Attribute::AttrKind Kind = *I;
+    if (Kind == Attribute::Alignment)
+      Attrs.push_back(std::make_pair(Idx, Attribute::
+                                     getWithAlignment(C, B.getAlignment())));
+    else if (Kind == Attribute::StackAlignment)
+      Attrs.push_back(std::make_pair(Idx, Attribute::
+                              getWithStackAlignment(C, B.getStackAlignment())));
+    else
+      Attrs.push_back(std::make_pair(Idx, Attribute::get(C, Kind)));
+  }
+
+  return get(C, Attrs);
 }
 
 AttributeSet AttributeSet::get(LLVMContext &C, unsigned Idx,