-public:
- AttributeEntry(AttrEntryKind Kind)
- : KindID(Kind) {}
- virtual ~AttributeEntry() {}
-
- unsigned getKindID() const { return KindID; }
-
- static inline bool classof(const AttributeEntry *) { return true; }
-};
-
-class EnumAttributeEntry : public AttributeEntry {
- Attribute::AttrKind Kind;
-public:
- EnumAttributeEntry(Attribute::AttrKind Kind)
- : AttributeEntry(EnumAttrEntry), Kind(Kind) {}
-
- Attribute::AttrKind getEnumKind() const { return Kind; }
-
- static inline bool classof(const AttributeEntry *AE) {
- return AE->getKindID() == EnumAttrEntry;
- }
- static inline bool classof(const EnumAttributeEntry *) { return true; }
-};
-
-class AlignAttributeEntry : public AttributeEntry {
- Attribute::AttrKind Kind;
- unsigned Align;
-public:
- AlignAttributeEntry(Attribute::AttrKind Kind, unsigned Align)
- : AttributeEntry(AlignAttrEntry), Kind(Kind), Align(Align) {}
-
- Attribute::AttrKind getEnumKind() const { return Kind; }
- unsigned getAlignment() const { return Align; }
-
- static inline bool classof(const AttributeEntry *AE) {
- return AE->getKindID() == AlignAttrEntry;
- }
- static inline bool classof(const AlignAttributeEntry *) { return true; }
-};
-
-class StringAttributeEntry : public AttributeEntry {
- std::string Kind;
- std::string Val;
-public:
- StringAttributeEntry(StringRef Kind, StringRef Val = StringRef())
- : AttributeEntry(StringAttrEntry), Kind(Kind), Val(Val) {}
-
- StringRef getStringKind() const { return Kind; }
- StringRef getStringValue() const { return Val; }
-
- static inline bool classof(const AttributeEntry *AE) {
- return AE->getKindID() == StringAttrEntry;
- }
- static inline bool classof(const StringAttributeEntry *) { return true; }
-};
-
-//===----------------------------------------------------------------------===//
-/// \class
-/// \brief This class represents a single, uniqued attribute. That attribute
-/// could be a single enum, a tuple, or a string.
-class AttributeImpl : public FoldingSetNode {
- LLVMContext &Context; ///< Global context for uniquing objects