16#if !defined(FEAT_COMPILER) && defined(__clang__)
19#define FEAT_COMPILER_CLANG (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
22#define FEAT_COMPILER ("clang " __clang_version__)
24#if(__clang_major__ >= 15)
25#define FEAT_DISABLE_WARNINGS _Pragma("clang diagnostic push") \
26 _Pragma("clang diagnostic ignored \"-Wall\"") \
27 _Pragma("clang diagnostic ignored \"-Wunused-variable\"") \
28 _Pragma("clang diagnostic ignored \"-Wunused-parameter\"") \
29 _Pragma("clang diagnostic ignored \"-Wsign-compare\"") \
30 _Pragma("clang diagnostic ignored \"-Wconversion\"") \
31 _Pragma("clang diagnostic ignored \"-Wmismatched-tags\"") \
32 _Pragma("clang diagnostic ignored \"-Wignored-qualifiers\"") \
33 _Pragma("clang diagnostic ignored \"-Wcast-qual\"") \
34 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \
35 _Pragma("clang diagnostic ignored \"-Wshadow\"") \
36 _Pragma("clang diagnostic ignored \"-Wundef\"") \
37 _Pragma("clang diagnostic ignored \"-Wimplicit-fallthrough\"") \
38 _Pragma("clang diagnostic ignored \"-Wcomma\"") \
39 _Pragma("clang diagnostic ignored \"-Wextra-semi\"") \
40 _Pragma("clang diagnostic ignored \"-Wextra-semi-stmt\"") \
41 _Pragma("clang diagnostic ignored \"-Wc++98-compat-extra-semi\"") \
42 _Pragma("clang diagnostic ignored \"-Wdeprecated-builtins\"") \
43 _Pragma("clang diagnostic ignored \"-Wsign-conversion\"")
44#elif(__clang_major__ >= 8)
45#define FEAT_DISABLE_WARNINGS _Pragma("clang diagnostic push") \
46 _Pragma("clang diagnostic ignored \"-Wunused-variable\"") \
47 _Pragma("clang diagnostic ignored \"-Wunused-parameter\"") \
48 _Pragma("clang diagnostic ignored \"-Wsign-compare\"") \
49 _Pragma("clang diagnostic ignored \"-Wconversion\"") \
50 _Pragma("clang diagnostic ignored \"-Wmismatched-tags\"") \
51 _Pragma("clang diagnostic ignored \"-Wignored-qualifiers\"") \
52 _Pragma("clang diagnostic ignored \"-Wcast-qual\"") \
53 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \
54 _Pragma("clang diagnostic ignored \"-Wshadow\"") \
55 _Pragma("clang diagnostic ignored \"-Wundef\"") \
56 _Pragma("clang diagnostic ignored \"-Wimplicit-fallthrough\"") \
57 _Pragma("clang diagnostic ignored \"-Wcomma\"") \
58 _Pragma("clang diagnostic ignored \"-Wextra-semi\"") \
59 _Pragma("clang diagnostic ignored \"-Wextra-semi-stmt\"") \
60 _Pragma("clang diagnostic ignored \"-Wc++98-compat-extra-semi\"")
61#elif(__clang_major__ >= 4)
62#define FEAT_DISABLE_WARNINGS _Pragma("clang diagnostic push") \
63 _Pragma("clang diagnostic ignored \"-Wunused-variable\"") \
64 _Pragma("clang diagnostic ignored \"-Wunused-parameter\"") \
65 _Pragma("clang diagnostic ignored \"-Wsign-compare\"") \
66 _Pragma("clang diagnostic ignored \"-Wconversion\"") \
67 _Pragma("clang diagnostic ignored \"-Wmismatched-tags\"") \
68 _Pragma("clang diagnostic ignored \"-Wignored-qualifiers\"") \
69 _Pragma("clang diagnostic ignored \"-Wcast-qual\"") \
70 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \
71 _Pragma("clang diagnostic ignored \"-Wshadow\"") \
72 _Pragma("clang diagnostic ignored \"-Wundef\"") \
73 _Pragma("clang diagnostic ignored \"-Wimplicit-fallthrough\"") \
74 _Pragma("clang diagnostic ignored \"-Wcomma\"")
76#define FEAT_DISABLE_WARNINGS _Pragma("clang diagnostic push") \
77 _Pragma("clang diagnostic ignored \"-Wunused-variable\"") \
78 _Pragma("clang diagnostic ignored \"-Wconversion\"") \
79 _Pragma("clang diagnostic ignored \"-Wmismatched-tags\"") \
80 _Pragma("clang diagnostic ignored \"-Wignored-qualifiers\"")
83#define FEAT_RESTORE_WARNINGS _Pragma("clang diagnostic pop")
85#define FEAT_PRAGMA_IVDEP _Pragma("omp simd")
88#define NOINLINE __attribute__((noinline))
90#define FORCE_INLINE inline __attribute__((always_inline))