| // 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 |
| // RUN: %clang_cc1 %s -verify=expected,wno-all,pedantic,format -fno-builtin -Wno-all -Werror=comment -Wno-error=abi -Werror=assume -Wformat |
| |
| #define diagnose_if(...) __attribute__((diagnose_if(__VA_ARGS__))) |
| |
| #ifndef EMTY_WARNING_GROUP |
| void bougus_warning() diagnose_if(true, "oh no", "warning", "bogus warning") {} // expected-error {{unknown warning group 'bogus warning'}} |
| |
| void show_in_system_header() diagnose_if(true, "oh no", "warning", "assume", "Banane") {} // expected-error {{'diagnose_if' attribute takes no more than 4 arguments}} |
| #endif // EMTY_WARNING_GROUP |
| |
| template <bool b> |
| void diagnose_if_wcomma() diagnose_if(b, "oh no", "warning", "comma") {} |
| |
| template <bool b> |
| void diagnose_if_wcomment() diagnose_if(b, "oh no", "warning", "comment") {} |
| |
| void empty_warning_group() diagnose_if(true, "oh no", "warning", "") {} // expected-error {{unknown warning group ''}} |
| void empty_warning_group_error() diagnose_if(true, "oh no", "error", "") {} // expected-error {{unknown warning group ''}} |
| |
| void diagnose_if_wabi_default_error() diagnose_if(true, "ABI stuff", "error", "abi") {} |
| void diagnose_assume() diagnose_if(true, "Assume diagnostic", "warning", "assume") {} |
| |
| void Wall() diagnose_if(true, "oh no", "warning", "all") {} |
| void Wpedantic() diagnose_if(true, "oh no", "warning", "pedantic") {} |
| void Wformat_extra_args() diagnose_if(true, "oh no", "warning", "format-extra-args") {} |
| |
| void call() { |
| diagnose_if_wcomma<true>(); // expected-warning {{oh no}} |
| diagnose_if_wcomma<false>(); |
| diagnose_if_wcomment<true>(); // expected-error {{oh no}} |
| diagnose_if_wcomment<false>(); |
| |
| #pragma clang diagnostic push |
| #pragma clang diagnostic ignored "-Wcomma" |
| diagnose_if_wcomma<true>(); |
| diagnose_if_wcomment<true>(); // expected-error {{oh no}} |
| #pragma clang diagnostic pop |
| |
| #pragma clang diagnostic push |
| #pragma clang diagnostic ignored "-Wcomment" |
| diagnose_if_wcomma<true>(); // expected-warning {{oh no}} |
| diagnose_if_wcomment<true>(); |
| #pragma clang diagnostic pop |
| |
| diagnose_if_wcomma<true>(); // expected-warning {{oh no}} |
| diagnose_if_wcomment<true>(); // expected-error {{oh no}} |
| |
| diagnose_if_wabi_default_error(); // expected-warning {{ABI stuff}} |
| diagnose_assume(); // expected-error {{Assume diagnostic}} |
| |
| // Make sure that the -Wassume diagnostic isn't fatal |
| diagnose_if_wabi_default_error(); // expected-warning {{ABI stuff}} |
| |
| Wall(); // wall-warning {{oh no}} |
| Wpedantic(); // pedantic-warning {{oh no}} |
| Wformat_extra_args(); // format-warning {{oh no}} |
| |
| #pragma clang diagnostic push |
| #pragma clang diagnostic ignored "-Wformat" |
| Wformat_extra_args(); |
| #pragma clang diagnostic pop |
| } |