1 //===--- Attributes.h - Attributes header -----------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_CLANG_BASIC_ATTRIBUTES_H 10 #define LLVM_CLANG_BASIC_ATTRIBUTES_H 11 12 #include "clang/Basic/LangOptions.h" 13 #include "clang/Basic/TargetInfo.h" 14 15 namespace clang { 16 17 class IdentifierInfo; 18 19 enum class AttrSyntax { 20 /// Is the identifier known as a GNU-style attribute? 21 GNU, 22 /// Is the identifier known as a __declspec-style attribute? 23 Declspec, 24 /// Is the identifier known as a [] Microsoft-style attribute? 25 Microsoft, 26 // Is the identifier known as a C++-style attribute? 27 CXX, 28 // Is the identifier known as a C-style attribute? 29 C, 30 // Is the identifier known as a pragma attribute? 31 Pragma 32 }; 33 34 /// Return the version number associated with the attribute if we 35 /// recognize and implement the attribute specified by the given information. 36 int hasAttribute(AttrSyntax Syntax, const IdentifierInfo *Scope, 37 const IdentifierInfo *Attr, const TargetInfo &Target, 38 const LangOptions &LangOpts); 39 40 } // end namespace clang 41 42 #endif // LLVM_CLANG_BASIC_ATTRIBUTES_H 43