Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===--- DemangleConfig.h ---------------------------------------*- 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
// This file contains a variety of feature test macros copied from
10
// include/llvm/Support/Compiler.h so that LLVMDemangle does not need to take
11
// a dependency on LLVMSupport.
12
//
13
//===----------------------------------------------------------------------===//
14
 
15
#ifndef LLVM_DEMANGLE_DEMANGLECONFIG_H
16
#define LLVM_DEMANGLE_DEMANGLECONFIG_H
17
 
18
#ifndef __has_feature
19
#define __has_feature(x) 0
20
#endif
21
 
22
#ifndef __has_cpp_attribute
23
#define __has_cpp_attribute(x) 0
24
#endif
25
 
26
#ifndef __has_attribute
27
#define __has_attribute(x) 0
28
#endif
29
 
30
#ifndef __has_builtin
31
#define __has_builtin(x) 0
32
#endif
33
 
34
#ifndef DEMANGLE_GNUC_PREREQ
35
#if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
36
#define DEMANGLE_GNUC_PREREQ(maj, min, patch)                           \
37
  ((__GNUC__ << 20) + (__GNUC_MINOR__ << 10) + __GNUC_PATCHLEVEL__ >=          \
38
   ((maj) << 20) + ((min) << 10) + (patch))
39
#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
40
#define DEMANGLE_GNUC_PREREQ(maj, min, patch)                           \
41
  ((__GNUC__ << 20) + (__GNUC_MINOR__ << 10) >= ((maj) << 20) + ((min) << 10))
42
#else
43
#define DEMANGLE_GNUC_PREREQ(maj, min, patch) 0
44
#endif
45
#endif
46
 
47
#if __has_attribute(used) || DEMANGLE_GNUC_PREREQ(3, 1, 0)
48
#define DEMANGLE_ATTRIBUTE_USED __attribute__((__used__))
49
#else
50
#define DEMANGLE_ATTRIBUTE_USED
51
#endif
52
 
53
#if __has_builtin(__builtin_unreachable) || DEMANGLE_GNUC_PREREQ(4, 5, 0)
54
#define DEMANGLE_UNREACHABLE __builtin_unreachable()
55
#elif defined(_MSC_VER)
56
#define DEMANGLE_UNREACHABLE __assume(false)
57
#else
58
#define DEMANGLE_UNREACHABLE
59
#endif
60
 
61
#if __has_attribute(noinline) || DEMANGLE_GNUC_PREREQ(3, 4, 0)
62
#define DEMANGLE_ATTRIBUTE_NOINLINE __attribute__((noinline))
63
#elif defined(_MSC_VER)
64
#define DEMANGLE_ATTRIBUTE_NOINLINE __declspec(noinline)
65
#else
66
#define DEMANGLE_ATTRIBUTE_NOINLINE
67
#endif
68
 
69
#if !defined(NDEBUG)
70
#define DEMANGLE_DUMP_METHOD DEMANGLE_ATTRIBUTE_NOINLINE DEMANGLE_ATTRIBUTE_USED
71
#else
72
#define DEMANGLE_DUMP_METHOD DEMANGLE_ATTRIBUTE_NOINLINE
73
#endif
74
 
75
#if __cplusplus > 201402L && __has_cpp_attribute(fallthrough)
76
#define DEMANGLE_FALLTHROUGH [[fallthrough]]
77
#elif __has_cpp_attribute(gnu::fallthrough)
78
#define DEMANGLE_FALLTHROUGH [[gnu::fallthrough]]
79
#elif !__cplusplus
80
// Workaround for llvm.org/PR23435, since clang 3.6 and below emit a spurious
81
// error when __has_cpp_attribute is given a scoped attribute in C mode.
82
#define DEMANGLE_FALLTHROUGH
83
#elif __has_cpp_attribute(clang::fallthrough)
84
#define DEMANGLE_FALLTHROUGH [[clang::fallthrough]]
85
#else
86
#define DEMANGLE_FALLTHROUGH
87
#endif
88
 
89
#define DEMANGLE_NAMESPACE_BEGIN namespace llvm { namespace itanium_demangle {
90
#define DEMANGLE_NAMESPACE_END } }
91
 
92
#endif