Attributes.h revision 651f13cea278ec967336033dd032faef0e9fc2ec
1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//===--- Attributes.h - Attributes header -----------------------*- C++ -*-===//
2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//
3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//                     The LLVM Compiler Infrastructure
4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//
5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// This file is distributed under the University of Illinois Open Source
6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// License. See LICENSE.TXT for details.
7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//
8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//===----------------------------------------------------------------------===//
9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#ifndef LLVM_CLANG_BASIC_ATTRIBUTES_H
11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#define LLVM_CLANG_BASIC_ATTRIBUTES_H
12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "llvm/ADT/Triple.h"
14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Basic/LangOptions.h"
15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace clang {
17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass IdentifierInfo;
19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum class AttrSyntax {
21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  /// Is the attribute identifier generally known for any syntax?
22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  Generic,
23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  /// Is the identifier known as a GNU-style attribute?
24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  GNU,
25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  /// Is the identifier known as a __declspec-style attribute?
26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  Declspec,
27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // Is the identifier known as a C++-style attribute?
28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  CXX
29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines/// \brief Return true if we recognize and implement the attribute specified by
32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines/// the given information.
33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesbool hasAttribute(AttrSyntax Syntax, const IdentifierInfo *Scope,
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                  const IdentifierInfo *Attr, const llvm::Triple &T,
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                  const LangOptions &LangOpts);
36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} // end namespace clang
38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#endif // LLVM_CLANG_BASIC_ATTRIBUTES_H
40