"The attached patch moves AttributeList::addAttributeList outside the

class so as to accomodate one or both parameters being NULL, " from Sean Hunt!

llvm-svn: 80683
This commit is contained in:
Douglas Gregor 2009-09-01 17:10:19 +00:00
parent b5557a7b42
commit 8bce25f2fe
2 changed files with 20 additions and 22 deletions

View File

@ -113,16 +113,6 @@ public:
AttributeList *getNext() const { return Next; }
void setNext(AttributeList *N) { Next = N; }
void addAttributeList(AttributeList *alist) {
assert((alist != 0) && "addAttributeList(): alist is null");
AttributeList *next = this, *prev;
do {
prev = next;
next = next->getNext();
} while (next);
prev->setNext(alist);
}
/// getNumArgs - Return the number of actual arguments to this attribute.
unsigned getNumArgs() const { return NumArgs; }
@ -172,6 +162,24 @@ public:
}
};
/// addAttributeLists - Add two AttributeLists together
/// The right-hand list is appended to the left-hand list, if any
/// A pointer to the joined list is returned.
/// Note: the lists are not left unmodified.
inline AttributeList* addAttributeLists (AttributeList *Left,
AttributeList *Right) {
if (!Left)
return Right;
AttributeList *next = Left, *prev;
do {
prev = next;
next = next->getNext();
} while (next);
prev->setNext(Right);
return Left;
}
} // end namespace clang
#endif

View File

@ -321,12 +321,7 @@ public:
/// int __attribute__((may_alias)) __attribute__((aligned(16))) var;
///
void AddAttributes(AttributeList *alist) {
if (!alist)
return; // we parsed __attribute__(()) or had a syntax error
if (AttrList)
alist->addAttributeList(AttrList);
AttrList = alist;
AttrList = addAttributeLists(AttrList, alist);
}
void SetAttributes(AttributeList *AL) { AttrList = AL; }
const AttributeList *getAttributes() const { return AttrList; }
@ -1067,12 +1062,7 @@ public:
///
/// Also extends the range of the declarator.
void AddAttributes(AttributeList *alist, SourceLocation LastLoc) {
if (!alist)
return; // we parsed __attribute__(()) or had a syntax error
if (AttrList)
alist->addAttributeList(AttrList);
AttrList = alist;
AttrList = addAttributeLists(AttrList, alist);
if (!LastLoc.isInvalid())
SetRangeEnd(LastLoc);