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