1885c5593SDmitri Gribenko // RUN: grep -Ev "// *[A-Z-]+:" %s > %t-input.cpp 2*5d12b13bSDmitry Polukhin // RUN: not clang-tidy %t-input.cpp -checks='-*,google-explicit-constructor,clang-diagnostic-missing-prototypes,clang-diagnostic-zero-length-array' --warnings-as-errors='clang-diagnostic-missing-prototypes,google-explicit-constructor' -export-fixes=%t.yaml -- -Wmissing-prototypes -Wzero-length-array > %t.msg 2>&1 3885c5593SDmitri Gribenko // RUN: FileCheck -input-file=%t.msg -check-prefix=CHECK-MESSAGES %s -implicit-check-not='{{warning|error|note}}:' 4885c5593SDmitri Gribenko // RUN: FileCheck -input-file=%t.yaml -check-prefix=CHECK-YAML %s 5885c5593SDmitri Gribenko #define X(n) void n ## n() {} 6885c5593SDmitri Gribenko X(f) 7c98c94d8SDmitry Polukhin int a[-1]; 88fa39752SWhisperity int b[0]; 9885c5593SDmitri Gribenko 1005404854SBalazs Benics void test(x); 1105404854SBalazs Benics struct Foo { 1205404854SBalazs Benics member; FooFoo13*5d12b13bSDmitry Polukhin Foo(int) {} 1405404854SBalazs Benics }; 1505404854SBalazs Benics 16*5d12b13bSDmitry Polukhin // CHECK-MESSAGES: -input.cpp:2:1: error: no previous prototype for function 'ff' [clang-diagnostic-missing-prototypes,-warnings-as-errors] 17885c5593SDmitri Gribenko // CHECK-MESSAGES: -input.cpp:1:19: note: expanded from macro 'X' 18885c5593SDmitri Gribenko // CHECK-MESSAGES: {{^}}note: expanded from here{{$}} 19885c5593SDmitri Gribenko // CHECK-MESSAGES: -input.cpp:2:1: note: declare 'static' if the function is not intended to be used outside of this translation unit 20885c5593SDmitri Gribenko // CHECK-MESSAGES: -input.cpp:1:14: note: expanded from macro 'X' 21c98c94d8SDmitry Polukhin // CHECK-MESSAGES: -input.cpp:3:7: error: 'a' declared as an array with a negative size [clang-diagnostic-error] 228fa39752SWhisperity // CHECK-MESSAGES: -input.cpp:4:7: warning: zero size arrays are an extension [clang-diagnostic-zero-length-array] 2305404854SBalazs Benics // CHECK-MESSAGES: -input.cpp:6:11: error: unknown type name 'x' [clang-diagnostic-error] 242cb2cd24SAaron Ballman // CHECK-MESSAGES: -input.cpp:8:3: error: a type specifier is required for all declarations [clang-diagnostic-error] 25*5d12b13bSDmitry Polukhin // CHECK-MESSAGES: -input.cpp:9:3: error: single-argument constructors must be marked explicit to avoid unintentional implicit conversions [google-explicit-constructor,-warnings-as-errors] 26885c5593SDmitri Gribenko 27885c5593SDmitri Gribenko // CHECK-YAML: --- 28885c5593SDmitri Gribenko // CHECK-YAML-NEXT: MainSourceFile: '{{.*}}-input.cpp' 29885c5593SDmitri Gribenko // CHECK-YAML-NEXT: Diagnostics: 30885c5593SDmitri Gribenko // CHECK-YAML-NEXT: - DiagnosticName: clang-diagnostic-missing-prototypes 31885c5593SDmitri Gribenko // CHECK-YAML-NEXT: DiagnosticMessage: 328fa39752SWhisperity // CHECK-YAML-NEXT: Message: 'no previous prototype for function ''ff''' 33885c5593SDmitri Gribenko // CHECK-YAML-NEXT: FilePath: '{{.*}}-input.cpp' 34885c5593SDmitri Gribenko // CHECK-YAML-NEXT: FileOffset: 30 35885c5593SDmitri Gribenko // CHECK-YAML-NEXT: Replacements: [] 36885c5593SDmitri Gribenko // CHECK-YAML-NEXT: Notes: 37885c5593SDmitri Gribenko // CHECK-YAML-NEXT: - Message: 'expanded from macro ''X''' 38885c5593SDmitri Gribenko // CHECK-YAML-NEXT: FilePath: '{{.*}}-input.cpp' 39885c5593SDmitri Gribenko // CHECK-YAML-NEXT: FileOffset: 18 40885c5593SDmitri Gribenko // CHECK-YAML-NEXT: Replacements: [] 41885c5593SDmitri Gribenko // CHECK-YAML-NEXT: - Message: expanded from here 42885c5593SDmitri Gribenko // CHECK-YAML-NEXT: FilePath: '' 43885c5593SDmitri Gribenko // CHECK-YAML-NEXT: FileOffset: 0 44885c5593SDmitri Gribenko // CHECK-YAML-NEXT: Replacements: [] 45885c5593SDmitri Gribenko // CHECK-YAML-NEXT: - Message: 'declare ''static'' if the function is not intended to be used outside of this translation unit' 46885c5593SDmitri Gribenko // CHECK-YAML-NEXT: FilePath: '{{.*}}-input.cpp' 47885c5593SDmitri Gribenko // CHECK-YAML-NEXT: FileOffset: 30 48885c5593SDmitri Gribenko // CHECK-YAML-NEXT: Replacements: 49885c5593SDmitri Gribenko // CHECK-YAML-NEXT: - FilePath: '{{.*}}-input.cpp' 50885c5593SDmitri Gribenko // CHECK-YAML-NEXT: Offset: 30 51885c5593SDmitri Gribenko // CHECK-YAML-NEXT: Length: 0 52885c5593SDmitri Gribenko // CHECK-YAML-NEXT: ReplacementText: 'static ' 53885c5593SDmitri Gribenko // CHECK-YAML-NEXT: - Message: 'expanded from macro ''X''' 54885c5593SDmitri Gribenko // CHECK-YAML-NEXT: FilePath: '{{.*}}-input.cpp' 55885c5593SDmitri Gribenko // CHECK-YAML-NEXT: FileOffset: 13 56885c5593SDmitri Gribenko // CHECK-YAML-NEXT: Replacements: [] 57*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: Level: Error 58c98c94d8SDmitry Polukhin // CHECK-YAML-NEXT: BuildDirectory: '{{.*}}' 59c98c94d8SDmitry Polukhin // CHECK-YAML-NEXT: - DiagnosticName: clang-diagnostic-error 60c98c94d8SDmitry Polukhin // CHECK-YAML-NEXT: DiagnosticMessage: 61c98c94d8SDmitry Polukhin // CHECK-YAML-NEXT: Message: '''a'' declared as an array with a negative size' 62c98c94d8SDmitry Polukhin // CHECK-YAML-NEXT: FilePath: '{{.*}}-input.cpp' 63c98c94d8SDmitry Polukhin // CHECK-YAML-NEXT: FileOffset: 41 64c98c94d8SDmitry Polukhin // CHECK-YAML-NEXT: Replacements: [] 65c98c94d8SDmitry Polukhin // CHECK-YAML-NEXT: Ranges: 66c98c94d8SDmitry Polukhin // CHECK-YAML-NEXT: - FilePath: '{{.*}}-input.cpp' 67c98c94d8SDmitry Polukhin // CHECK-YAML-NEXT: FileOffset: 41 688fa39752SWhisperity // CHECK-YAML-NEXT: Length: 2 693b677b81SWhisperity // CHECK-YAML-NEXT: Level: Error 703b677b81SWhisperity // CHECK-YAML-NEXT: BuildDirectory: '{{.*}}' 718fa39752SWhisperity // CHECK-YAML-NEXT: - DiagnosticName: clang-diagnostic-zero-length-array 728fa39752SWhisperity // CHECK-YAML-NEXT: DiagnosticMessage: 738fa39752SWhisperity // CHECK-YAML-NEXT: Message: zero size arrays are an extension 748fa39752SWhisperity // CHECK-YAML-NEXT: FilePath: '{{.*}}-input.cpp' 758fa39752SWhisperity // CHECK-YAML-NEXT: FileOffset: 52 768fa39752SWhisperity // CHECK-YAML-NEXT: Replacements: [] 778fa39752SWhisperity // CHECK-YAML-NEXT: Ranges: 788fa39752SWhisperity // CHECK-YAML-NEXT: - FilePath: '{{.*}}-input.cpp' 798fa39752SWhisperity // CHECK-YAML-NEXT: FileOffset: 52 808fa39752SWhisperity // CHECK-YAML-NEXT: Length: 1 818fa39752SWhisperity // CHECK-YAML-NEXT: Level: Warning 828fa39752SWhisperity // CHECK-YAML-NEXT: BuildDirectory: '{{.*}}' 8305404854SBalazs Benics // CHECK-YAML-NEXT: - DiagnosticName: clang-diagnostic-error 8405404854SBalazs Benics // CHECK-YAML-NEXT: DiagnosticMessage: 8505404854SBalazs Benics // CHECK-YAML-NEXT: Message: 'unknown type name ''x''' 8605404854SBalazs Benics // CHECK-YAML-NEXT: FilePath: '{{.*}}-input.cpp' 8705404854SBalazs Benics // CHECK-YAML-NEXT: FileOffset: 67 8805404854SBalazs Benics // CHECK-YAML-NEXT: Replacements: [] 8905404854SBalazs Benics // CHECK-YAML-NEXT: Level: Error 9005404854SBalazs Benics // CHECK-YAML-NEXT: BuildDirectory: '{{.*}}' 9105404854SBalazs Benics // CHECK-YAML-NEXT: - DiagnosticName: clang-diagnostic-error 9205404854SBalazs Benics // CHECK-YAML-NEXT: DiagnosticMessage: 932cb2cd24SAaron Ballman // CHECK-YAML-NEXT: Message: a type specifier is required for all declarations 9405404854SBalazs Benics // CHECK-YAML-NEXT: FilePath: '{{.*}}-input.cpp' 9505404854SBalazs Benics // CHECK-YAML-NEXT: FileOffset: 86 9605404854SBalazs Benics // CHECK-YAML-NEXT: Replacements: [] 9705404854SBalazs Benics // CHECK-YAML-NEXT: Level: Error 9805404854SBalazs Benics // CHECK-YAML-NEXT: BuildDirectory: '{{.*}}' 99*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: - DiagnosticName: google-explicit-constructor 100*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: DiagnosticMessage: 101*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: Message: single-argument constructors must be marked explicit to avoid unintentional implicit conversions 102*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: FilePath: '{{.*}}-input.cpp' 103*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: FileOffset: 96 104*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: Replacements: 105*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: - FilePath: '{{.*}}-input.cpp' 106*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: Offset: 96 107*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: Length: 0 108*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: ReplacementText: 'explicit ' 109*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: Level: Error 110*5d12b13bSDmitry Polukhin // CHECK-YAML-NEXT: BuildDirectory: '{{.*}}' 111885c5593SDmitri Gribenko // CHECK-YAML-NEXT: ... 112