1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only %s -verify 2*67e74705SXin Li #ifndef __has_warning 3*67e74705SXin Li #error Should have __has_warning 4*67e74705SXin Li #endif 5*67e74705SXin Li 6*67e74705SXin Li #if __has_warning("not valid") // expected-warning {{__has_warning expected option name}} 7*67e74705SXin Li #endif 8*67e74705SXin Li 9*67e74705SXin Li // expected-warning@+2 {{Should have -Wparentheses}} 10*67e74705SXin Li #if __has_warning("-Wparentheses") 11*67e74705SXin Li #warning Should have -Wparentheses 12*67e74705SXin Li #endif 13*67e74705SXin Li 14*67e74705SXin Li // expected-error@+2 {{expected string literal in '__has_warning'}} 15*67e74705SXin Li // expected-error@+1 {{missing ')'}} expected-note@+1 {{match}} 16*67e74705SXin Li #if __has_warning(-Wfoo) 17*67e74705SXin Li #endif 18*67e74705SXin Li 19*67e74705SXin Li // expected-warning@+3 {{Not a valid warning flag}} 20*67e74705SXin Li #if __has_warning("-Wnot-a-valid-warning-flag-at-all") 21*67e74705SXin Li #else 22*67e74705SXin Li #warning Not a valid warning flag 23*67e74705SXin Li #endif 24*67e74705SXin Li 25*67e74705SXin Li // expected-error@+1 {{missing '(' after '__has_warning'}} 26*67e74705SXin Li #if __has_warning "not valid" 27*67e74705SXin Li #endif 28*67e74705SXin Li 29*67e74705SXin Li // Macro expansion does not occur in the parameter to __has_warning 30*67e74705SXin Li // (as is also expected behaviour for ordinary macros), so the 31*67e74705SXin Li // following should not expand: 32*67e74705SXin Li 33*67e74705SXin Li #define MY_ALIAS "-Wparentheses" 34*67e74705SXin Li 35*67e74705SXin Li // expected-error@+1 {{expected}} 36*67e74705SXin Li #if __has_warning(MY_ALIAS) 37*67e74705SXin Li #error Alias expansion not allowed 38*67e74705SXin Li #endif 39*67e74705SXin Li 40*67e74705SXin Li // But deferring should expand: 41*67e74705SXin Li #define HAS_WARNING(X) __has_warning(X) 42*67e74705SXin Li 43*67e74705SXin Li #if !HAS_WARNING(MY_ALIAS) 44*67e74705SXin Li #error Expansion should have occurred 45*67e74705SXin Li #endif 46