From 1c20ff028e6e85b34a40908f61cf13d6ae32505f Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Wed, 20 Feb 2013 23:04:11 +0000 Subject: Add and remove the attribute from the correct slot. The slot that we're adding/removing the attribute from may not be the same as the attribute coming in. Make sure that they match up before we try to add/remove them. PR15313 llvm-svn: 175684 --- llvm/lib/IR/Function.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'llvm/lib/IR/Function.cpp') diff --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp index 839e496..15c05e7 100644 --- a/llvm/lib/IR/Function.cpp +++ b/llvm/lib/IR/Function.cpp @@ -125,12 +125,22 @@ bool Argument::hasStructRetAttr() const { /// addAttr - Add attributes to an argument. void Argument::addAttr(AttributeSet AS) { - getParent()->addAttributes(getArgNo() + 1, AS); + assert(AS.getNumSlots() == 1 && + "Trying to add more than one attribute set to an argument!"); + AttrBuilder B(AS, AS.getSlotIndex(0)); + getParent()->addAttributes(getArgNo() + 1, + AttributeSet::get(Parent->getContext(), + getArgNo() + 1, B)); } /// removeAttr - Remove attributes from an argument. void Argument::removeAttr(AttributeSet AS) { - getParent()->removeAttributes(getArgNo() + 1, AS); + assert(AS.getNumSlots() == 1 && + "Trying to remove more than one attribute set from an argument!"); + AttrBuilder B(AS, AS.getSlotIndex(0)); + getParent()->removeAttributes(getArgNo() + 1, + AttributeSet::get(Parent->getContext(), + getArgNo() + 1, B)); } //===----------------------------------------------------------------------===// -- cgit v1.1