xref: /aosp_15_r20/external/clang/test/Preprocessor/pushable-diagnostics.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s
2*67e74705SXin Li 
3*67e74705SXin Li #pragma clang diagnostic pop // expected-warning{{pragma diagnostic pop could not pop, no matching push}}
4*67e74705SXin Li 
5*67e74705SXin Li #pragma clang diagnostic puhs // expected-warning {{pragma diagnostic expected 'error', 'warning', 'ignored', 'fatal', 'push', or 'pop'}}
6*67e74705SXin Li 
7*67e74705SXin Li int a = 'df'; // expected-warning{{multi-character character constant}}
8*67e74705SXin Li 
9*67e74705SXin Li #pragma clang diagnostic push
10*67e74705SXin Li #pragma clang diagnostic ignored "-Wmultichar"
11*67e74705SXin Li 
12*67e74705SXin Li int b = 'df'; // no warning.
13*67e74705SXin Li #pragma clang diagnostic pop
14*67e74705SXin Li 
15*67e74705SXin Li int c = 'df';  // expected-warning{{multi-character character constant}}
16*67e74705SXin Li 
17*67e74705SXin Li #pragma clang diagnostic pop // expected-warning{{pragma diagnostic pop could not pop, no matching push}}
18*67e74705SXin Li 
19*67e74705SXin Li // Test -Weverything
20*67e74705SXin Li 
ppo0()21*67e74705SXin Li void ppo0(){} // first verify that we do not give anything on this
22*67e74705SXin Li #pragma clang diagnostic push // now push
23*67e74705SXin Li 
24*67e74705SXin Li #pragma clang diagnostic warning "-Weverything"
ppr1()25*67e74705SXin Li void ppr1(){} // expected-warning {{no previous prototype for function 'ppr1'}}
26*67e74705SXin Li 
27*67e74705SXin Li #pragma clang diagnostic push // push again
28*67e74705SXin Li #pragma clang diagnostic ignored "-Weverything"  // Set to ignore in this level.
pps2()29*67e74705SXin Li void pps2(){}
30*67e74705SXin Li #pragma clang diagnostic warning "-Weverything"  // Set to warning in this level.
ppt2()31*67e74705SXin Li void ppt2(){} // expected-warning {{no previous prototype for function 'ppt2'}}
32*67e74705SXin Li #pragma clang diagnostic error "-Weverything"  // Set to error in this level.
ppt3()33*67e74705SXin Li void ppt3(){} // expected-error {{no previous prototype for function 'ppt3'}}
34*67e74705SXin Li #pragma clang diagnostic pop // pop should go back to warning level
35*67e74705SXin Li 
pps1()36*67e74705SXin Li void pps1(){} // expected-warning {{no previous prototype for function 'pps1'}}
37*67e74705SXin Li 
38*67e74705SXin Li 
39*67e74705SXin Li #pragma clang diagnostic pop // Another pop should disble it again
ppu()40*67e74705SXin Li void ppu(){}
41*67e74705SXin Li 
42