[llvm] r174035 - Revert r174026, "Remove Attribute::hasAttributes() and make Attribute::hasAttribute() private."
NAKAMURA Takumi
geek4civic at gmail.com
Wed Jan 30 19:47:28 PST 2013
Author: chapuni
Date: Wed Jan 30 21:47:28 2013
New Revision: 174035
URL: http://llvm.org/viewvc/llvm-project?rev=174035&view=rev
Log:
Revert r174026, "Remove Attribute::hasAttributes() and make Attribute::hasAttribute() private."
It broke many hosts to crash.
Modified:
llvm/trunk/include/llvm/IR/Attributes.h
llvm/trunk/lib/IR/AttributeImpl.h
llvm/trunk/lib/IR/Attributes.cpp
Modified: llvm/trunk/include/llvm/IR/Attributes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Attributes.h?rev=174035&r1=174034&r2=174035&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/Attributes.h (original)
+++ llvm/trunk/include/llvm/IR/Attributes.h Wed Jan 30 21:47:28 2013
@@ -107,9 +107,6 @@ private:
Attribute(AttributeImpl *A) : pImpl(A) {}
static Attribute get(LLVMContext &Context, AttrBuilder &B);
-
- /// \brief Return true if the attribute is present.
- bool hasAttribute(AttrKind Val) const;
public:
Attribute() : pImpl(0) {}
@@ -129,6 +126,12 @@ public:
// Attribute Accessors
//===--------------------------------------------------------------------===//
+ /// \brief Return true if the attribute is present.
+ bool hasAttribute(AttrKind Val) const;
+
+ /// \brief Return true if attributes exist
+ bool hasAttributes() const;
+
/// \brief Return the kind of this attribute.
Constant *getAttributeKind() const;
Modified: llvm/trunk/lib/IR/AttributeImpl.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AttributeImpl.h?rev=174035&r1=174034&r2=174035&view=diff
==============================================================================
--- llvm/trunk/lib/IR/AttributeImpl.h (original)
+++ llvm/trunk/lib/IR/AttributeImpl.h Wed Jan 30 21:47:28 2013
@@ -46,6 +46,7 @@ public:
AttributeImpl(LLVMContext &C, StringRef data);
bool hasAttribute(Attribute::AttrKind A) const;
+ bool hasAttributes() const;
Constant *getAttributeKind() const { return Kind; }
ArrayRef<Constant*> getAttributeValues() const { return Vals; }
Modified: llvm/trunk/lib/IR/Attributes.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Attributes.cpp?rev=174035&r1=174034&r2=174035&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Attributes.cpp (original)
+++ llvm/trunk/lib/IR/Attributes.cpp Wed Jan 30 21:47:28 2013
@@ -82,6 +82,10 @@ bool Attribute::hasAttribute(AttrKind Va
return pImpl && pImpl->hasAttribute(Val);
}
+bool Attribute::hasAttributes() const {
+ return pImpl && pImpl->hasAttributes();
+}
+
Constant *Attribute::getAttributeKind() const {
return pImpl ? pImpl->getAttributeKind() : 0;
}
@@ -181,7 +185,7 @@ std::string Attribute::getAsString() con
}
bool Attribute::operator==(AttrKind K) const {
- return (pImpl && *pImpl == K) || (!pImpl && K == None);
+ return pImpl && *pImpl == K;
}
bool Attribute::operator!=(AttrKind K) const {
return !(*this == K);
@@ -222,6 +226,10 @@ bool AttributeImpl::hasAttribute(Attribu
return (Raw() & getAttrMask(A)) != 0;
}
+bool AttributeImpl::hasAttributes() const {
+ return Raw() != 0;
+}
+
uint64_t AttributeImpl::getAlignment() const {
uint64_t Mask = Raw() & getAttrMask(Attribute::Alignment);
return 1ULL << ((Mask >> 16) - 1);
@@ -361,7 +369,7 @@ AttributeSetNode *AttributeSetNode::get(
bool AttributeSetNode::hasAttribute(Attribute::AttrKind Kind) const {
for (SmallVectorImpl<Attribute>::const_iterator I = AttrList.begin(),
E = AttrList.end(); I != E; ++I)
- if (*I == Kind)
+ if (I->hasAttribute(Kind))
return true;
return false;
}
@@ -369,7 +377,7 @@ bool AttributeSetNode::hasAttribute(Attr
unsigned AttributeSetNode::getAlignment() const {
for (SmallVectorImpl<Attribute>::const_iterator I = AttrList.begin(),
E = AttrList.end(); I != E; ++I)
- if (*I == Attribute::Alignment)
+ if (I->hasAttribute(Attribute::Alignment))
return I->getAlignment();
return 0;
}
@@ -377,7 +385,7 @@ unsigned AttributeSetNode::getAlignment(
unsigned AttributeSetNode::getStackAlignment() const {
for (SmallVectorImpl<Attribute>::const_iterator I = AttrList.begin(),
E = AttrList.end(); I != E; ++I)
- if (*I == Attribute::StackAlignment)
+ if (I->hasAttribute(Attribute::StackAlignment))
return I->getStackAlignment();
return 0;
}
@@ -446,7 +454,7 @@ AttributeSet AttributeSet::get(LLVMConte
for (unsigned i = 0, e = Attrs.size(); i != e; ++i) {
assert((!i || Attrs[i-1].first <= Attrs[i].first) &&
"Misordered Attributes list!");
- assert(Attrs[i].second != Attribute::None &&
+ assert(Attrs[i].second.hasAttributes() &&
"Pointless attribute!");
}
#endif
@@ -674,7 +682,7 @@ bool AttributeSet::hasAttrSomewhere(Attr
for (unsigned I = 0, E = pImpl->getNumAttributes(); I != E; ++I)
for (AttributeSetImpl::const_iterator II = pImpl->begin(I),
IE = pImpl->end(I); II != IE; ++II)
- if (*II == Attr)
+ if (II->hasAttribute(Attr))
return true;
return false;
More information about the llvm-commits
mailing list