xref: /llvm-project/clang/test/SemaCXX/diagnose_if-warning-group.cpp (revision 0865ecc5150b9a55ba1f9e30b6d463a66ac362a6)
1 // RUN: %clang_cc1 %s -verify=expected,wall -fno-builtin -Wno-pedantic -Werror=comment -Wno-error=abi -Wfatal-errors=assume -Wno-fatal-errors=assume -Wno-format
2 // RUN: %clang_cc1 %s -verify=expected,wno-all,pedantic,format -fno-builtin -Wno-all -Werror=comment -Wno-error=abi -Werror=assume -Wformat
3 
4 #define diagnose_if(...) __attribute__((diagnose_if(__VA_ARGS__)))
5 
6 #ifndef EMTY_WARNING_GROUP
7 void bougus_warning() diagnose_if(true, "oh no", "warning", "bogus warning") {} // expected-error {{unknown warning group 'bogus warning'}}
8 
9 void show_in_system_header() diagnose_if(true, "oh no", "warning", "assume", "Banane") {} // expected-error {{'diagnose_if' attribute takes no more than 4 arguments}}
10 #endif // EMTY_WARNING_GROUP
11 
12 template <bool b>
13 void diagnose_if_wcomma() diagnose_if(b, "oh no", "warning", "comma") {}
14 
15 template <bool b>
16 void diagnose_if_wcomment() diagnose_if(b, "oh no", "warning", "comment") {}
17 
18 void empty_warning_group() diagnose_if(true, "oh no", "warning", "") {} // expected-error {{unknown warning group ''}}
19 void empty_warning_group_error() diagnose_if(true, "oh no", "error", "") {} // expected-error {{unknown warning group ''}}
20 
21 void diagnose_if_wabi_default_error() diagnose_if(true, "ABI stuff", "error", "abi") {}
22 void diagnose_assume() diagnose_if(true, "Assume diagnostic", "warning", "assume") {}
23 
24 void Wall() diagnose_if(true, "oh no", "warning", "all") {}
25 void Wpedantic() diagnose_if(true, "oh no", "warning", "pedantic") {}
26 void Wformat_extra_args() diagnose_if(true, "oh no", "warning", "format-extra-args") {}
27 
28 void call() {
29   diagnose_if_wcomma<true>(); // expected-warning {{oh no}}
30   diagnose_if_wcomma<false>();
31   diagnose_if_wcomment<true>(); // expected-error {{oh no}}
32   diagnose_if_wcomment<false>();
33 
34 #pragma clang diagnostic push
35 #pragma clang diagnostic ignored "-Wcomma"
36   diagnose_if_wcomma<true>();
37   diagnose_if_wcomment<true>(); // expected-error {{oh no}}
38 #pragma clang diagnostic pop
39 
40 #pragma clang diagnostic push
41 #pragma clang diagnostic ignored "-Wcomment"
42   diagnose_if_wcomma<true>(); // expected-warning {{oh no}}
43   diagnose_if_wcomment<true>();
44 #pragma clang diagnostic pop
45 
46   diagnose_if_wcomma<true>(); // expected-warning {{oh no}}
47   diagnose_if_wcomment<true>(); // expected-error {{oh no}}
48 
49   diagnose_if_wabi_default_error(); // expected-warning {{ABI stuff}}
50   diagnose_assume(); // expected-error {{Assume diagnostic}}
51 
52   // Make sure that the -Wassume diagnostic isn't fatal
53   diagnose_if_wabi_default_error(); // expected-warning {{ABI stuff}}
54 
55   Wall(); // wall-warning {{oh no}}
56   Wpedantic(); // pedantic-warning {{oh no}}
57   Wformat_extra_args(); // format-warning {{oh no}}
58 
59 #pragma clang diagnostic push
60 #pragma clang diagnostic ignored "-Wformat"
61   Wformat_extra_args();
62 #pragma clang diagnostic pop
63 }
64