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