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