xref: /aosp_15_r20/external/clang/test/Preprocessor/warning_tests.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
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