forked from OSchip/llvm-project
Introduce the notion of 'ignored' attributes, so that all attributes
we accept are not modeled somehow via Attr.td. llvm-svn: 155998
This commit is contained in:
parent
38ce8615a3
commit
19fbb8fa81
|
@ -99,6 +99,8 @@ class Attr {
|
|||
bit ASTNode = 1;
|
||||
// Set to true for attributes which have handler in Sema.
|
||||
bit SemaHandler = 1;
|
||||
// Set to true for attributes that are completely ignored.
|
||||
bit Ignored = 0;
|
||||
// Any additional text that should be included verbatim in the class.
|
||||
code AdditionalMembers = [{}];
|
||||
}
|
||||
|
@ -180,6 +182,13 @@ def Blocks : InheritableAttr {
|
|||
let Args = [EnumArgument<"Type", "BlockType", ["byref"], ["ByRef"]>];
|
||||
}
|
||||
|
||||
def Bounded : Attr {
|
||||
let Spellings = ["bounded"];
|
||||
let ASTNode = 0;
|
||||
let SemaHandler = 0;
|
||||
let Ignored = 1;
|
||||
}
|
||||
|
||||
def CarriesDependency : InheritableParamAttr {
|
||||
let Spellings = ["carries_dependency"];
|
||||
let Subjects = [ParmVar, Function];
|
||||
|
@ -627,6 +636,13 @@ def VectorSize : Attr {
|
|||
let ASTNode = 0;
|
||||
}
|
||||
|
||||
def VecTypeHint : Attr {
|
||||
let Spellings = ["vec_type_hint"];
|
||||
let ASTNode = 0;
|
||||
let SemaHandler = 0;
|
||||
let Ignored = 1;
|
||||
}
|
||||
|
||||
def Visibility : InheritableAttr {
|
||||
let Spellings = ["visibility"];
|
||||
let Args = [EnumArgument<"Visibility", "VisibilityType",
|
||||
|
|
|
@ -107,7 +107,5 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo *Name) {
|
|||
|
||||
return llvm::StringSwitch<AttributeList::Kind>(AttrName)
|
||||
#include "clang/Sema/AttrParsedAttrKinds.inc"
|
||||
.Case("bounded", IgnoredAttribute) // OpenBSD
|
||||
.Case("vec_type_hint", IgnoredAttribute)
|
||||
.Default(UnknownAttribute);
|
||||
}
|
||||
|
|
|
@ -1093,19 +1093,23 @@ void ClangAttrParsedAttrKindsEmitter::run(raw_ostream &OS) {
|
|||
Record &Attr = **I;
|
||||
|
||||
bool SemaHandler = Attr.getValueAsBit("SemaHandler");
|
||||
bool Ignored = Attr.getValueAsBit("Ignored");
|
||||
|
||||
if (SemaHandler) {
|
||||
if (SemaHandler || Ignored) {
|
||||
std::vector<StringRef> Spellings =
|
||||
getValueAsListOfStrings(Attr, "Spellings");
|
||||
|
||||
for (std::vector<StringRef>::const_iterator I = Spellings.begin(),
|
||||
E = Spellings.end(); I != E; ++I) {
|
||||
StringRef AttrName = *I, Spelling = *I;
|
||||
StringRef AttrName = *I, Spelling = *I;
|
||||
|
||||
AttrName = NormalizeAttrName(AttrName);
|
||||
Spelling = NormalizeAttrSpelling(Spelling);
|
||||
AttrName = NormalizeAttrName(AttrName);
|
||||
Spelling = NormalizeAttrSpelling(Spelling);
|
||||
|
||||
OS << ".Case(\"" << Spelling << "\", " << "AT_" << AttrName << ")\n";
|
||||
if (SemaHandler)
|
||||
OS << ".Case(\"" << Spelling << "\", " << "AT_" << AttrName << ")\n";
|
||||
else
|
||||
OS << ".Case(\"" << Spelling << "\", IgnoredAttribute)\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue