64 lines · cpp
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-format2// RUN: %clang_cc1 %s -verify=expected,wno-all,pedantic,format -fno-builtin -Wno-all -Werror=comment -Wno-error=abi -Werror=assume -Wformat3 4#define diagnose_if(...) __attribute__((diagnose_if(__VA_ARGS__)))5 6#ifndef EMTY_WARNING_GROUP7void bougus_warning() diagnose_if(true, "oh no", "warning", "bogus warning") {} // expected-error {{unknown warning group 'bogus warning'}}8 9void 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_GROUP11 12template <bool b>13void diagnose_if_wcomma() diagnose_if(b, "oh no", "warning", "comma") {}14 15template <bool b>16void diagnose_if_wcomment() diagnose_if(b, "oh no", "warning", "comment") {}17 18void empty_warning_group() diagnose_if(true, "oh no", "warning", "") {} // expected-error {{unknown warning group ''}}19void empty_warning_group_error() diagnose_if(true, "oh no", "error", "") {} // expected-error {{unknown warning group ''}}20 21void diagnose_if_wabi_default_error() diagnose_if(true, "ABI stuff", "error", "abi") {}22void diagnose_assume() diagnose_if(true, "Assume diagnostic", "warning", "assume") {}23 24void Wall() diagnose_if(true, "oh no", "warning", "all") {}25void Wpedantic() diagnose_if(true, "oh no", "warning", "pedantic") {}26void Wformat_extra_args() diagnose_if(true, "oh no", "warning", "format-extra-args") {}27 28void 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 push35#pragma clang diagnostic ignored "-Wcomma"36 diagnose_if_wcomma<true>();37 diagnose_if_wcomment<true>(); // expected-error {{oh no}}38#pragma clang diagnostic pop39 40#pragma clang diagnostic push41#pragma clang diagnostic ignored "-Wcomment"42 diagnose_if_wcomma<true>(); // expected-warning {{oh no}}43 diagnose_if_wcomment<true>();44#pragma clang diagnostic pop45 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 fatal53 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 push60#pragma clang diagnostic ignored "-Wformat"61 Wformat_extra_args();62#pragma clang diagnostic pop63}64