1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Basic/Attributes.h" 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Basic/IdentifierTable.h" 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "llvm/ADT/StringSwitch.h" 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesusing namespace clang; 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesbool clang::hasAttribute(AttrSyntax Syntax, const IdentifierInfo *Scope, 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const IdentifierInfo *Attr, const llvm::Triple &T, 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const LangOptions &LangOpts) { 9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines StringRef Name = Attr->getName(); 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // Normalize the attribute name, __foo__ becomes foo. 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (Name.size() >= 4 && Name.startswith("__") && Name.endswith("__")) 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Name = Name.substr(2, Name.size() - 4); 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Basic/AttrHasAttributeImpl.inc" 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return false; 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 18