forked from OSchip/llvm-project
"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:
parent
b5557a7b42
commit
8bce25f2fe
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue