xref: /aosp_15_r20/external/clang/test/Preprocessor/_Pragma-in-macro-arg.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -verify -Wconversion
2*67e74705SXin Li 
3*67e74705SXin Li // Don't crash (rdar://11168596)
4*67e74705SXin Li #define A(desc) _Pragma("clang diagnostic push")  _Pragma("clang diagnostic ignored \"-Wparentheses\"") _Pragma("clang diagnostic pop")
5*67e74705SXin Li #define B(desc) A(desc)
6*67e74705SXin Li B(_Pragma("clang diagnostic ignored \"-Wparentheses\""))
7*67e74705SXin Li 
8*67e74705SXin Li 
9*67e74705SXin Li #define EMPTY(x)
10*67e74705SXin Li #define INACTIVE(x) EMPTY(x)
11*67e74705SXin Li 
12*67e74705SXin Li #define ID(x) x
13*67e74705SXin Li #define ACTIVE(x) ID(x)
14*67e74705SXin Li 
15*67e74705SXin Li // This should be ignored..
16*67e74705SXin Li INACTIVE(_Pragma("clang diagnostic ignored \"-Wconversion\""))
17*67e74705SXin Li 
18*67e74705SXin Li #define IGNORE_CONV _Pragma("clang diagnostic ignored \"-Wconversion\"") _Pragma("clang diagnostic ignored \"-Wconversion\"")
19*67e74705SXin Li 
20*67e74705SXin Li // ..as should this.
21*67e74705SXin Li INACTIVE(IGNORE_CONV)
22*67e74705SXin Li 
23*67e74705SXin Li #define IGNORE_POPPUSH(Pop, Push, W, D) Push W D Pop
24*67e74705SXin Li IGNORE_POPPUSH(_Pragma("clang diagnostic pop"), _Pragma("clang diagnostic push"),
25*67e74705SXin Li                _Pragma("clang diagnostic ignored \"-Wconversion\""), int q = (double)1.0);
26*67e74705SXin Li 
27*67e74705SXin Li int x1 = (double)1.0; // expected-warning {{implicit conversion}}
28*67e74705SXin Li 
29*67e74705SXin Li ACTIVE(_Pragma) ("clang diagnostic ignored \"-Wconversion\"")) // expected-error {{_Pragma takes a parenthesized string literal}} \
30*67e74705SXin Li                                       expected-error {{expected identifier or '('}} expected-error {{expected ')'}} expected-note {{to match this '('}}
31*67e74705SXin Li 
32*67e74705SXin Li // This should disable the warning.
33*67e74705SXin Li ACTIVE(IGNORE_CONV)
34*67e74705SXin Li 
35*67e74705SXin Li int x2 = (double)1.0;
36