mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 04:33:05 +00:00
Revert r174026, "Remove Attribute::hasAttributes() and make Attribute::hasAttribute() private."
It broke many hosts to crash. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174035 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3e3de565e9
commit
eddab1550e
@ -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;
|
||||
|
||||
|
@ -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; }
|
||||
|
@ -82,6 +82,10 @@ bool Attribute::hasAttribute(AttrKind Val) const {
|
||||
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() const {
|
||||
}
|
||||
|
||||
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(Attribute::AttrKind A) const {
|
||||
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(LLVMContext &C,
|
||||
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(Attribute::AttrKind Kind) const {
|
||||
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() const {
|
||||
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(LLVMContext &C,
|
||||
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(Attribute::AttrKind Attr) const {
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user