1/* @title: Compiler Diagnostics */
2#pragma once
3#include <compiler/name.h>
4
5#if defined(cn_id_clang)
6#define cc_wno_override_init_start \
7 _Pragma("clang diagnostic push") \
8 _Pragma("clang diagnostic ignored \"-Winitializer-overrides\"")
9#define cc_wno_override_init_end _Pragma("clang diagnostic pop")
10#define cc_wno_override_init_expr(type, initializer) \
11 cc_wno_override_init_start initializer cc_wno_override_init_end
12#endif
13
14#if defined(cn_id_gcc)
15#define cc_wno_override_init_start \
16 _Pragma("GCC diagnostic push") \
17 _Pragma("GCC diagnostic ignored \"-Woverride-init\"") \
18 _Pragma("GCC diagnostic ignored \"-Woverride-init-side-effects\"")
19#define cc_wno_override_init_end _Pragma("GCC diagnostic pop")
20#define cc_wno_override_init_cat_(a, b) a##b
21#define cc_wno_override_init_cat(a, b) cc_wno_override_init_cat_(a, b)
22#define cc_wno_override_init_expr(type, initializer) \
23 cc_wno_override_init_expr_( \
24 type, initializer, \
25 cc_wno_override_init_cat(cc_wno_override_init_value_, __COUNTER__))
26#define cc_wno_override_init_expr_(type, initializer, val_) \
27 ({ \
28 cc_wno_override_init_start type val_ = initializer; \
29 cc_wno_override_init_end val_; \
30 })
31#endif
32
33#if !defined(cc_wno_override_init_start)
34#define cc_wno_override_init_start
35#define cc_wno_override_init_end
36#define cc_wno_override_init_expr(type, initializer) initializer
37#endif
38