1274958Sdim//===--- Attributes.h - Attributes header -----------------------*- C++ -*-===//
2274958Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6274958Sdim//
7274958Sdim//===----------------------------------------------------------------------===//
8274958Sdim
9274958Sdim#ifndef LLVM_CLANG_BASIC_ATTRIBUTES_H
10274958Sdim#define LLVM_CLANG_BASIC_ATTRIBUTES_H
11274958Sdim
12280031Sdim#include "clang/Basic/LangOptions.h"
13296417Sdim#include "clang/Basic/TargetInfo.h"
14274958Sdim
15274958Sdimnamespace clang {
16274958Sdim
17274958Sdimclass IdentifierInfo;
18274958Sdim
19274958Sdimenum class AttrSyntax {
20274958Sdim  /// Is the identifier known as a GNU-style attribute?
21274958Sdim  GNU,
22274958Sdim  /// Is the identifier known as a __declspec-style attribute?
23274958Sdim  Declspec,
24314564Sdim  /// Is the identifier known as a [] Microsoft-style attribute?
25314564Sdim  Microsoft,
26274958Sdim  // Is the identifier known as a C++-style attribute?
27274958Sdim  CXX,
28327952Sdim  // Is the identifier known as a C-style attribute?
29327952Sdim  C,
30274958Sdim  // Is the identifier known as a pragma attribute?
31274958Sdim  Pragma
32274958Sdim};
33274958Sdim
34341825Sdim/// Return the version number associated with the attribute if we
35280031Sdim/// recognize and implement the attribute specified by the given information.
36280031Sdimint hasAttribute(AttrSyntax Syntax, const IdentifierInfo *Scope,
37296417Sdim                 const IdentifierInfo *Attr, const TargetInfo &Target,
38280031Sdim                 const LangOptions &LangOpts);
39274958Sdim
40274958Sdim} // end namespace clang
41274958Sdim
42274958Sdim#endif // LLVM_CLANG_BASIC_ATTRIBUTES_H
43