15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// RUN: %clang_cc1 -DTEST1 -verify %s
25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// RUN: not %clang_cc1 -DTEST2 -verify %s 2>&1 | FileCheck -check-prefix=CHECK2 %s
35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// RUN: not %clang_cc1 -DTEST3 -verify %s 2>&1 | FileCheck -check-prefix=CHECK3 %s
45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// RUN: not %clang_cc1 -DTEST4 -verify %s 2>&1 | FileCheck -check-prefix=CHECK4 %s
55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// RUN: not %clang_cc1 -DTEST5 -verify %s 2>&1 | FileCheck -check-prefix=CHECK5 %s
65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// expected-warning@ malformed
85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// expected-error@7 1 {{missing or invalid line number}}
95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// expected-warning@0 malformed
115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// expected-error@10 {{missing or invalid line number}}
128d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
138d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang// expected-warning@-50 malformed
148d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang// expected-error@13 {{missing or invalid line number}}
158d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
168d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang// expected-warning malformed
172aee48938c6f1a389879e8baa60e979b5b729148Sebastien Hertz// expected-error@16 {{cannot find start}}
182aee48938c6f1a389879e8baa60e979b5b729148Sebastien Hertz
192aee48938c6f1a389879e8baa60e979b5b729148Sebastien Hertz// expected-error 0+ {{should also be ignored}}
208d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
218d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#ifdef TEST1
2271dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang#if 0
238d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang// expected-error {{should be ignored}}
248d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#endif
258d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang// eexpected-error {{should also be ignored: unrecognised directive}}
268d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#error should not be ignored
278d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang// expected-error@-1 1+ {{should not be ignored}}
288d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
298d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#line 90
3071dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuangunexpected a; // expected-error@+0 + {{unknown type}}
318d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
328d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#line 60
338d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuangunexpected b; // expected-error@33 1-1 {{unknown type}}
348d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
358d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang// expected-error@+2 {{file not found}} check that multi-line handled correctly: \
3671dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang
3771dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang#include "missing_header_file.include"
3871dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang#endif
3971dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang
4071dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang#ifdef TEST2
418d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#define MACRO some_value // expected-error {{define_error}}
428d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#undef MACRO extra_token // expected-warning {{undef_error}}
438d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#line -2                 // expected-error {{line_error}}
448d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#error AAA               // expected-error {{BBB}} <- this shall be part of diagnostic
458d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#warning CCC             // expected-warning {{DDD}} <- this shall be part of diagnostic
468d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang
478d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang#if 0
488d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang// This is encapsulated in "#if 0" so that the expected-* checks below
498d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang// are not inadvertently included in the diagnostic checking!
5071dd891bb89a38cf26be412eb894f804f16a0b7aTsu Chiang Chuang
518d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang//      CHECK2: error: 'error' diagnostics expected but not seen:
528d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang// CHECK2-NEXT:   Line 41: define_error
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// CHECK2-NEXT:   Line 43: line_error
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// CHECK2-NEXT: error: 'error' diagnostics seen but not expected:
55f0b10c7b3de1a61e531d5775417c37fe42021ee4Elliott Hughes// CHECK2-NEXT:   Line 43: #line directive requires a positive integer argument
56348bf15315b2da38964762d22955bd682359fff2Tsu Chiang Chuang// CHECK2-NEXT:   Line 44: AAA // expected-error {{[{][{]BBB[}][}]}} <- this shall be part of diagnostic
579a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes// CHECK2-NEXT: error: 'warning' diagnostics expected but not seen:
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// CHECK2-NEXT:   Line 42: undef_error
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// CHECK2-NEXT: error: 'warning' diagnostics seen but not expected:
60bff9fb7e654a9fee9f7ef7f9ebf3c150da6d15f6Tsu Chiang Chuang// CHECK2-NEXT:   Line 42: extra tokens at end of #undef directive
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// CHECK2-NEXT:   Line 45: CCC // expected-warning {{[{][{]DDD[}][}]}} <- this shall be part of diagnostic
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// CHECK2-NEXT: 7 errors generated.
632d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes#endif
642d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes#endif
652d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes
669a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes#ifdef TEST3
679a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes#ifndef TEST3         // expected-note {{line_67}}
689a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes                      // expected-note {{line_68_ignored}}
699a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes# ifdef UNDEFINED     // expected-note {{line_69_ignored}}
709a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes# endif               // expected-note {{line_70_ignored}}
7121a5212937e9f06496eacc836d540123ea194ee7Brian Carlstrom#elif defined(TEST3)  // expected-note {{line_71}}
729a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes# if 1                // expected-note {{line_72}}
738435047d3e43a34ec1972a844737aa2102a570d6Brian Carlstrom                      // expected-note {{line_73}}
742d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes# else                // expected-note {{line_74}}
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                      // expected-note {{line_75_ignored}}
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes#  ifndef TEST3       // expected-note {{line_76_ignored}}
77559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz#  endif              // expected-note {{line_77_ignored}}
78559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz# endif               // expected-note {{line_78}}
79559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz#endif
80559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz
81559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz//      CHECK3: error: 'note' diagnostics expected but not seen:
82559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz// CHECK3-NEXT:   Line 67: line_67
83559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz// CHECK3-NEXT:   Line 71: line_71
84559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz// CHECK3-NEXT:   Line 72: line_72
85559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz// CHECK3-NEXT:   Line 73: line_73
86559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz// CHECK3-NEXT:   Line 74: line_74
87f0b10c7b3de1a61e531d5775417c37fe42021ee4Elliott Hughes// CHECK3-NEXT:   Line 78: line_78
8831fe38c771ae6d717600f01eb577e8a4cd5ab378Elliott Hughes// CHECK3-NEXT: 6 errors generated.
8931fe38c771ae6d717600f01eb577e8a4cd5ab378Elliott Hughes#endif
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes#ifdef TEST4
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes#include "missing_header_file.include" // expected-error {{include_error}}
93559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz
94559758352e3839e8d8dd5d31525819329bd57a31Sebastien Hertz//      CHECK4: error: 'error' diagnostics expected but not seen:
95966a5ab08d2b77b99ec0e43460598fd376262530Elliott Hughes// CHECK4-NEXT:   Line 92: include_error
968d4fdfa6ab6520f8c481e7cac80f8a26bafa21aaTsu Chiang Chuang// CHECK4-NEXT: error: 'error' diagnostics seen but not expected:
979a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes// CHECK4-NEXT:   Line 92: 'missing_header_file.include' file not found
989a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes// CHECK4-NEXT: 2 errors generated.
999a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes#endif
1009a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes
10154fe82258da2c4a316a2629521175d98006d00eeSebastien Hertz#ifdef TEST5
1029a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes#include "verify-directive.h"
1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// expected-error@50 {{source file test}}
1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1059a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes//      CHECK5: error: 'error' diagnostics expected but not seen:
1065d36ea7c6bdfa6fbcd1ccd53465fe41d7225273bElliott Hughes// CHECK5-NEXT:   Line 1 (directive at {{.*}}verify-directive.h:2): include file test
1075d36ea7c6bdfa6fbcd1ccd53465fe41d7225273bElliott Hughes// CHECK5-NEXT:   Line 50 (directive at {{.*}}verify.c:103): source file test
1082d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes// CHECK5-NEXT: 2 errors generated.
1092d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes#endif
1102d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes
1119a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes#if 0
1129a87b87557db22896b45f9b43e7a03cd9fdcb106Elliott Hughes// RUN: not %clang_cc1 -verify %t.invalid 2>&1 | FileCheck -check-prefix=CHECK6 %s
1132d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes
1142d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes//      CHECK6: error: no expected directives found: consider use of 'expected-no-diagnostics'
1152d5b22d49cac12d5387c36c090230e2c1f1bc7d0Elliott Hughes// CHECK6-NEXT: error: 'error' diagnostics seen but not expected:
1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes// CHECK6-NEXT:   (frontend): error reading '{{.*}}verify.c.tmp.invalid'
117// CHECK6-NEXT: 2 errors generated.
118
119// RUN: printf '//expected-error@2{{1}}\n#error 2\n' | not %clang_cc1 -verify 2>&1 | FileCheck -check-prefix=CHECK7 %s
120
121//      CHECK7: error: 'error' diagnostics expected but not seen:
122// CHECK7-NEXT:   Line 2 (directive at <stdin>:1): 1
123// CHECK7-NEXT: error: 'error' diagnostics seen but not expected:
124// CHECK7-NEXT:   Line 2: 2
125// CHECK7-NEXT: 2 errors generated.
126#endif
127
128#ifdef TEST8
129// RUN: not %clang_cc1 -DTEST8 -verify %s 2>&1 | FileCheck -check-prefix=CHECK8 %s
130
131// expected-warning@nonexistent-file:1 {{ }}
132// expected-error@-1 {{file 'nonexistent-file' could not be located}}
133
134// expected-warning@verify-directive.h: {{ }}
135// expected-error@-1 {{missing or invalid line number}}
136
137// expected-warning@verify-directive.h:0 {{ }}
138// expected-error@-1 {{missing or invalid line number}}
139
140// expected-warning@verify-directive.h:0*{{ }}
141// expected-error@-1 {{missing or invalid line number}}
142
143// expected-warning@verify-directive.h:*0{{ }}
144// syntactically ok -- means match in any line for 0 occurrences.
145
146// expected-warning@verify-directive.h:1 {{diagnostic}}
147
148//      CHECK8: error: 'warning' diagnostics expected but not seen:
149// CHECK8-NEXT:   File {{.*}}verify-directive.h Line 1 (directive at {{.*}}verify.c:146): diagnostic
150// CHECK8-NEXT: 1 error generated.
151#endif
152