Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / libcxxabi / include / __cxxabi_config.h
blobe8aa37e6d5ec9e2ce3a9d062e77df06818127639
1 //===----------------------------------------------------------------------===//
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 //===----------------------------------------------------------------------===//
9 #ifndef ____CXXABI_CONFIG_H
10 #define ____CXXABI_CONFIG_H
12 #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \
13 !defined(__ARM_DWARF_EH__) && !defined(__SEH__)
14 #define _LIBCXXABI_ARM_EHABI
15 #endif
17 #if !defined(__has_attribute)
18 #define __has_attribute(_attribute_) 0
19 #endif
21 #if defined(__clang__)
22 # define _LIBCXXABI_COMPILER_CLANG
23 # ifndef __apple_build_version__
24 # define _LIBCXXABI_CLANG_VER (__clang_major__ * 100 + __clang_minor__)
25 # endif
26 #elif defined(__GNUC__)
27 # define _LIBCXXABI_COMPILER_GCC
28 #elif defined(_MSC_VER)
29 # define _LIBCXXABI_COMPILER_MSVC
30 #elif defined(__IBMCPP__)
31 # define _LIBCXXABI_COMPILER_IBM
32 #endif
34 #if defined(_WIN32)
35 #if defined(_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS) || (defined(__MINGW32__) && !defined(_LIBCXXABI_BUILDING_LIBRARY))
36 #define _LIBCXXABI_HIDDEN
37 #define _LIBCXXABI_DATA_VIS
38 #define _LIBCXXABI_FUNC_VIS
39 #define _LIBCXXABI_TYPE_VIS
40 #elif defined(_LIBCXXABI_BUILDING_LIBRARY)
41 #define _LIBCXXABI_HIDDEN
42 #define _LIBCXXABI_DATA_VIS __declspec(dllexport)
43 #define _LIBCXXABI_FUNC_VIS __declspec(dllexport)
44 #define _LIBCXXABI_TYPE_VIS __declspec(dllexport)
45 #else
46 #define _LIBCXXABI_HIDDEN
47 #define _LIBCXXABI_DATA_VIS __declspec(dllimport)
48 #define _LIBCXXABI_FUNC_VIS __declspec(dllimport)
49 #define _LIBCXXABI_TYPE_VIS __declspec(dllimport)
50 #endif
51 #else
52 #if !defined(_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS)
53 #define _LIBCXXABI_HIDDEN __attribute__((__visibility__("hidden")))
54 #define _LIBCXXABI_DATA_VIS __attribute__((__visibility__("default")))
55 #define _LIBCXXABI_FUNC_VIS __attribute__((__visibility__("default")))
56 #if __has_attribute(__type_visibility__)
57 #define _LIBCXXABI_TYPE_VIS __attribute__((__type_visibility__("default")))
58 #else
59 #define _LIBCXXABI_TYPE_VIS __attribute__((__visibility__("default")))
60 #endif
61 #else
62 #define _LIBCXXABI_HIDDEN
63 #define _LIBCXXABI_DATA_VIS
64 #define _LIBCXXABI_FUNC_VIS
65 #define _LIBCXXABI_TYPE_VIS
66 #endif
67 #endif
69 #if defined(_LIBCXXABI_COMPILER_MSVC)
70 #define _LIBCXXABI_WEAK
71 #else
72 #define _LIBCXXABI_WEAK __attribute__((__weak__))
73 #endif
75 #if defined(__clang__)
76 #define _LIBCXXABI_COMPILER_CLANG
77 #elif defined(__GNUC__)
78 #define _LIBCXXABI_COMPILER_GCC
79 #endif
81 #if __has_attribute(__no_sanitize__) && defined(_LIBCXXABI_COMPILER_CLANG)
82 #define _LIBCXXABI_NO_CFI __attribute__((__no_sanitize__("cfi")))
83 #else
84 #define _LIBCXXABI_NO_CFI
85 #endif
87 // wasm32 follows the arm32 ABI convention of using 32-bit guard.
88 #if defined(__arm__) || defined(__wasm32__) || defined(__ARM64_ARCH_8_32__)
89 # define _LIBCXXABI_GUARD_ABI_ARM
90 #endif
92 #if defined(_LIBCXXABI_COMPILER_CLANG)
93 # if !__has_feature(cxx_exceptions)
94 # define _LIBCXXABI_NO_EXCEPTIONS
95 # endif
96 #elif defined(_LIBCXXABI_COMPILER_GCC) && !defined(__EXCEPTIONS)
97 # define _LIBCXXABI_NO_EXCEPTIONS
98 #endif
100 #if defined(_WIN32)
101 #define _LIBCXXABI_DTOR_FUNC __thiscall
102 #else
103 #define _LIBCXXABI_DTOR_FUNC
104 #endif
106 #endif // ____CXXABI_CONFIG_H