xref: /aosp_15_r20/external/clang/test/Frontend/verify.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -DTEST1 -verify %s
2*67e74705SXin Li // RUN: not %clang_cc1 -DTEST2 -verify %s 2>&1 | FileCheck -check-prefix=CHECK2 %s
3*67e74705SXin Li // RUN: not %clang_cc1 -DTEST3 -verify %s 2>&1 | FileCheck -check-prefix=CHECK3 %s
4*67e74705SXin Li // RUN: not %clang_cc1 -DTEST4 -verify %s 2>&1 | FileCheck -check-prefix=CHECK4 %s
5*67e74705SXin Li // RUN: not %clang_cc1 -DTEST5 -verify %s 2>&1 | FileCheck -check-prefix=CHECK5 %s
6*67e74705SXin Li 
7*67e74705SXin Li // expected-warning@ malformed
8*67e74705SXin Li // expected-error@7 1 {{missing or invalid line number}}
9*67e74705SXin Li 
10*67e74705SXin Li // expected-warning@0 malformed
11*67e74705SXin Li // expected-error@10 {{missing or invalid line number}}
12*67e74705SXin Li 
13*67e74705SXin Li // expected-warning@-50 malformed
14*67e74705SXin Li // expected-error@13 {{missing or invalid line number}}
15*67e74705SXin Li 
16*67e74705SXin Li // expected-warning malformed
17*67e74705SXin Li // expected-error@16 {{cannot find start}}
18*67e74705SXin Li 
19*67e74705SXin Li // expected-error 0+ {{should also be ignored}}
20*67e74705SXin Li 
21*67e74705SXin Li #ifdef TEST1
22*67e74705SXin Li #if 0
23*67e74705SXin Li // expected-error {{should be ignored}}
24*67e74705SXin Li #endif
25*67e74705SXin Li // eexpected-error {{should also be ignored: unrecognised directive}}
26*67e74705SXin Li #error should not be ignored
27*67e74705SXin Li // expected-error@-1 1+ {{should not be ignored}}
28*67e74705SXin Li 
29*67e74705SXin Li #line 90
30*67e74705SXin Li unexpected a; // expected-error@+0 + {{unknown type}}
31*67e74705SXin Li 
32*67e74705SXin Li #line 60
33*67e74705SXin Li unexpected b; // expected-error@33 1-1 {{unknown type}}
34*67e74705SXin Li 
35*67e74705SXin Li // expected-error@+2 {{file not found}} check that multi-line handled correctly: \
36*67e74705SXin Li 
37*67e74705SXin Li #include "missing_header_file.include"
38*67e74705SXin Li #endif
39*67e74705SXin Li 
40*67e74705SXin Li #ifdef TEST2
41*67e74705SXin Li #define MACRO some_value // expected-error {{define_error}}
42*67e74705SXin Li #undef MACRO extra_token // expected-warning {{undef_error}}
43*67e74705SXin Li #line -2                 // expected-error {{line_error}}
44*67e74705SXin Li #error AAA               // expected-error {{BBB}} <- this shall be part of diagnostic
45*67e74705SXin Li #warning CCC             // expected-warning {{DDD}} <- this shall be part of diagnostic
46*67e74705SXin Li 
47*67e74705SXin Li #if 0
48*67e74705SXin Li // This is encapsulated in "#if 0" so that the expected-* checks below
49*67e74705SXin Li // are not inadvertently included in the diagnostic checking!
50*67e74705SXin Li 
51*67e74705SXin Li //      CHECK2: error: 'error' diagnostics expected but not seen:
52*67e74705SXin Li // CHECK2-NEXT:   Line 41: define_error
53*67e74705SXin Li // CHECK2-NEXT:   Line 43: line_error
54*67e74705SXin Li // CHECK2-NEXT: error: 'error' diagnostics seen but not expected:
55*67e74705SXin Li // CHECK2-NEXT:   Line 43: #line directive requires a positive integer argument
56*67e74705SXin Li // CHECK2-NEXT:   Line 44: AAA // expected-error {{[{][{]BBB[}][}]}} <- this shall be part of diagnostic
57*67e74705SXin Li // CHECK2-NEXT: error: 'warning' diagnostics expected but not seen:
58*67e74705SXin Li // CHECK2-NEXT:   Line 42: undef_error
59*67e74705SXin Li // CHECK2-NEXT: error: 'warning' diagnostics seen but not expected:
60*67e74705SXin Li // CHECK2-NEXT:   Line 42: extra tokens at end of #undef directive
61*67e74705SXin Li // CHECK2-NEXT:   Line 45: CCC // expected-warning {{[{][{]DDD[}][}]}} <- this shall be part of diagnostic
62*67e74705SXin Li // CHECK2-NEXT: 7 errors generated.
63*67e74705SXin Li #endif
64*67e74705SXin Li #endif
65*67e74705SXin Li 
66*67e74705SXin Li #ifdef TEST3
67*67e74705SXin Li #ifndef TEST3         // expected-note {{line_67}}
68*67e74705SXin Li                       // expected-note {{line_68_ignored}}
69*67e74705SXin Li # ifdef UNDEFINED     // expected-note {{line_69_ignored}}
70*67e74705SXin Li # endif               // expected-note {{line_70_ignored}}
71*67e74705SXin Li #elif defined(TEST3)  // expected-note {{line_71}}
72*67e74705SXin Li # if 1                // expected-note {{line_72}}
73*67e74705SXin Li                       // expected-note {{line_73}}
74*67e74705SXin Li # else                // expected-note {{line_74}}
75*67e74705SXin Li                       // expected-note {{line_75_ignored}}
76*67e74705SXin Li #  ifndef TEST3       // expected-note {{line_76_ignored}}
77*67e74705SXin Li #  endif              // expected-note {{line_77_ignored}}
78*67e74705SXin Li # endif               // expected-note {{line_78}}
79*67e74705SXin Li #endif
80*67e74705SXin Li 
81*67e74705SXin Li //      CHECK3: error: 'note' diagnostics expected but not seen:
82*67e74705SXin Li // CHECK3-NEXT:   Line 67: line_67
83*67e74705SXin Li // CHECK3-NEXT:   Line 71: line_71
84*67e74705SXin Li // CHECK3-NEXT:   Line 72: line_72
85*67e74705SXin Li // CHECK3-NEXT:   Line 73: line_73
86*67e74705SXin Li // CHECK3-NEXT:   Line 74: line_74
87*67e74705SXin Li // CHECK3-NEXT:   Line 78: line_78
88*67e74705SXin Li // CHECK3-NEXT: 6 errors generated.
89*67e74705SXin Li #endif
90*67e74705SXin Li 
91*67e74705SXin Li #ifdef TEST4
92*67e74705SXin Li #include "missing_header_file.include" // expected-error {{include_error}}
93*67e74705SXin Li 
94*67e74705SXin Li //      CHECK4: error: 'error' diagnostics expected but not seen:
95*67e74705SXin Li // CHECK4-NEXT:   Line 92: include_error
96*67e74705SXin Li // CHECK4-NEXT: error: 'error' diagnostics seen but not expected:
97*67e74705SXin Li // CHECK4-NEXT:   Line 92: 'missing_header_file.include' file not found
98*67e74705SXin Li // CHECK4-NEXT: 2 errors generated.
99*67e74705SXin Li #endif
100*67e74705SXin Li 
101*67e74705SXin Li #ifdef TEST5
102*67e74705SXin Li #include "verify-directive.h"
103*67e74705SXin Li // expected-error@50 {{source file test}}
104*67e74705SXin Li 
105*67e74705SXin Li //      CHECK5: error: 'error' diagnostics expected but not seen:
106*67e74705SXin Li // CHECK5-NEXT:   Line 1 (directive at {{.*}}verify-directive.h:2): include file test
107*67e74705SXin Li // CHECK5-NEXT:   Line 50 (directive at {{.*}}verify.c:103): source file test
108*67e74705SXin Li // CHECK5-NEXT: 2 errors generated.
109*67e74705SXin Li #endif
110*67e74705SXin Li 
111*67e74705SXin Li #if 0
112*67e74705SXin Li // RUN: not %clang_cc1 -verify %t.invalid 2>&1 | FileCheck -check-prefix=CHECK6 %s
113*67e74705SXin Li 
114*67e74705SXin Li //      CHECK6: error: no expected directives found: consider use of 'expected-no-diagnostics'
115*67e74705SXin Li // CHECK6-NEXT: error: 'error' diagnostics seen but not expected:
116*67e74705SXin Li // CHECK6-NEXT:   (frontend): error reading '{{.*}}verify.c.tmp.invalid'
117*67e74705SXin Li // CHECK6-NEXT: 2 errors generated.
118*67e74705SXin Li 
119*67e74705SXin Li // RUN: printf '//expected-error@2{{1}}\n#error 2\n' | not %clang_cc1 -verify 2>&1 | FileCheck -check-prefix=CHECK7 %s
120*67e74705SXin Li 
121*67e74705SXin Li //      CHECK7: error: 'error' diagnostics expected but not seen:
122*67e74705SXin Li // CHECK7-NEXT:   Line 2 (directive at <stdin>:1): 1
123*67e74705SXin Li // CHECK7-NEXT: error: 'error' diagnostics seen but not expected:
124*67e74705SXin Li // CHECK7-NEXT:   Line 2: 2
125*67e74705SXin Li // CHECK7-NEXT: 2 errors generated.
126*67e74705SXin Li #endif
127*67e74705SXin Li 
128*67e74705SXin Li #ifdef TEST8
129*67e74705SXin Li // RUN: not %clang_cc1 -DTEST8 -verify %s 2>&1 | FileCheck -check-prefix=CHECK8 %s
130*67e74705SXin Li 
131*67e74705SXin Li // expected-warning@nonexistent-file:1 {{ }}
132*67e74705SXin Li // expected-error@-1 {{file 'nonexistent-file' could not be located}}
133*67e74705SXin Li 
134*67e74705SXin Li // [email protected]: {{ }}
135*67e74705SXin Li // expected-error@-1 {{missing or invalid line number}}
136*67e74705SXin Li 
137*67e74705SXin Li // [email protected]:0 {{ }}
138*67e74705SXin Li // expected-error@-1 {{missing or invalid line number}}
139*67e74705SXin Li 
140*67e74705SXin Li // [email protected]:0*{{ }}
141*67e74705SXin Li // expected-error@-1 {{missing or invalid line number}}
142*67e74705SXin Li 
143*67e74705SXin Li // [email protected]:*0{{ }}
144*67e74705SXin Li // syntactically ok -- means match in any line for 0 occurrences.
145*67e74705SXin Li 
146*67e74705SXin Li // [email protected]:1 {{diagnostic}}
147*67e74705SXin Li 
148*67e74705SXin Li //      CHECK8: error: 'warning' diagnostics expected but not seen:
149*67e74705SXin Li // CHECK8-NEXT:   File {{.*}}verify-directive.h Line 1 (directive at {{.*}}verify.c:146): diagnostic
150*67e74705SXin Li // CHECK8-NEXT: 1 error generated.
151*67e74705SXin Li #endif
152