return Attrs.Bits != A.Attrs.Bits;
}
- Attributes operator & (const Attributes &A) const;
- Attributes &operator &= (const Attributes &A);
-
uint64_t Raw() const;
/// @brief Which attributes cannot be applied to a type.
Attributes::get(Attributes::Builder(RAttrs).
removeAttributes(Attributes::typeIncompatible(NRetTy)));
else
- assert((RAttrs & Attributes::typeIncompatible(NRetTy)) == 0
- && "Return attributes no longer compatible?");
+ assert(!Attributes::Builder(RAttrs).
+ hasAttributes(Attributes::typeIncompatible(NRetTy)) &&
+ "Return attributes no longer compatible?");
if (RAttrs)
AttributesVec.push_back(AttributeWithIndex::get(0, RAttrs));
return false; // Cannot transform this parameter value.
Attributes Attrs = CallerPAL.getParamAttributes(i + 1);
- if (Attrs & Attributes::typeIncompatible(ParamTy))
+ if (Attributes::Builder(Attrs).
+ hasAttributes(Attributes::typeIncompatible(ParamTy)))
return false; // Attribute not compatible with transformed value.
// If the parameter is passed as a byval argument, then we have to have a
return Attrs.isEmptyOrSingleton();
}
-Attributes Attributes::operator & (const Attributes &A) const {
- return Attributes(Raw() & A.Raw());
-}
-Attributes &Attributes::operator &= (const Attributes &A) {
- Attrs.Bits &= A.Raw();
- return *this;
-}
-
uint64_t Attributes::Raw() const {
return Attrs.Bits;
}
Attrs.hasAttribute(Attributes::AlwaysInline)), "Attributes "
"'noinline and alwaysinline' are incompatible!", V);
- Attributes TypeI = Attrs & Attributes::typeIncompatible(Ty);
- Assert1(!TypeI, "Wrong type for attribute " +
- TypeI.getAsString(), V);
+ Assert1(!Attributes::Builder(Attrs).
+ hasAttributes(Attributes::typeIncompatible(Ty)),
+ "Wrong types for attribute: " +
+ Attributes::typeIncompatible(Ty).getAsString(), V);
if (PointerType *PTy = dyn_cast<PointerType>(Ty))
Assert1(!Attrs.hasAttribute(Attributes::ByVal) ||