5 #include "llvm/ADT/StringSwitch.h" 11 StringRef Name = Attr->
getName();
13 if (Name.size() >= 4 && Name.startswith(
"__") && Name.endswith(
"__"))
14 Name = Name.substr(2, Name.size() - 4);
17 StringRef ScopeName = Scope ? Scope->
getName() :
"";
18 if (ScopeName ==
"__gnu__")
20 else if (ScopeName ==
"_Clang")
23 #include "clang/Basic/AttrHasAttributeImpl.inc" 30 #define ATTR_MATCH_RULE(NAME, SPELLING, IsAbstract) \ 33 #include "clang/Basic/AttrSubMatchRulesList.inc" 35 llvm_unreachable(
"Invalid subject match rule");
45 if (ScopeName ==
"__gnu__")
47 else if (ScopeName ==
"_Clang")
54 StringRef NormalizedScopeName,
58 bool ShouldNormalize =
62 (NormalizedScopeName.empty() || NormalizedScopeName ==
"gnu" ||
63 NormalizedScopeName ==
"clang"));
64 if (ShouldNormalize && AttrName.size() >= 4 && AttrName.startswith(
"__") &&
65 AttrName.endswith(
"__"))
66 AttrName = AttrName.slice(2, AttrName.size() - 2);
72 return ScopeName && (ScopeName->
isStr(
"gnu") || ScopeName->
isStr(
"__gnu__"));
75 #include "clang/Sema/AttrParsedAttrKinds.inc" 81 StringRef AttrName = Name->
getName();
95 return ::getAttrKind(FullName, SyntaxUsed);
98 unsigned AttributeCommonInfo::calculateAttributeSpellingListIndex()
const {
107 #include "clang/Sema/AttrSpellingListIndex.inc"
Syntax
The style used to specify an attribute.
One of these records is kept for each identifier that is lexed.
SubjectMatchRule
A list of all the recognized kinds of attributes.
bool isStr(const char(&Str)[StrLen]) const
Return true if this is the identifier for the specified string.
static StringRef normalizeAttrScopeName(StringRef ScopeName, AttributeCommonInfo::Syntax SyntaxUsed)
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Scope - A scope is a transient data structure that is used while parsing the program.
int hasAttribute(AttrSyntax Syntax, const IdentifierInfo *Scope, const IdentifierInfo *Attr, const TargetInfo &Target, const LangOptions &LangOpts)
Return the version number associated with the attribute if we recognize and implement the attribute s...
const IdentifierInfo * getAttrName() const
Exposes information about the current target.
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
const char * getSubjectMatchRuleSpelling(SubjectMatchRule Rule)
StringRef getName() const
Return the actual identifier string.
Dataflow Directional Tag Classes.
static std::string getName(const CallEvent &Call)
static StringRef normalizeAttrName(StringRef AttrName, StringRef NormalizedScopeName, AttributeCommonInfo::Syntax SyntaxUsed)
const IdentifierInfo * getScopeName() const
Kind getParsedKind() const
Attr - This represents one attribute.