verify.c 5.8 KB

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