blob: f963d999f13c09d7afdd3f7e19cd32463d1b2a1b [file] [edit]
; Check that all substitutions and attempted captures, whether for string or
; numeric variables, are reported when an unexpected pattern (e.g., CHECK-NOT)
; or expected pattern (e.g., CHECK) does not match the input.
;
; Because an unmatched pattern cannot actually capture, it might somehow seem
; wrong to report attempted captures. However, that report can be enlightening
; when the match failed because the test author has forgotten that square
; brackets are special in FileCheck patterns. For example:
;
; CHECK: [[clang::optnone]] void foo() {
RUN: rm -rf %t
RUN: split-file %s %t
DEFINE: %{opts} =
DEFINE: %{run} = \
DEFINE: %ProtectFileCheckOutput \
DEFINE: not FileCheck %{opts} %t/check.txt < %t/input.txt 2>&1 | \
DEFINE: FileCheck %s -match-full-lines -strict-whitespace -check-prefixes
REDEFINE: %{opts} = -dump-input=never
RUN: %{run} ERR
REDEFINE: %{opts} = -dump-input=never -vv
RUN: %{run} ERR,ERR-VV
REDEFINE: %{opts} = -dump-input=always
RUN: %{run} ERR,DMP
REDEFINE: %{opts} = -dump-input=always -vv
RUN: %{run} ERR,DMP,DMP-VV
ERR-NOT:{{.}}
ERR-VV:{{.*}}/check.txt:1:9: remark: CHECK: expected string found in input
ERR-VV-NEXT: CHECK: {{.*}}
ERR-VV-NEXT: ^
ERR-VV-NEXT:<stdin>:1:1: note: found here
ERR-VV-NEXT:abc 16
ERR-VV-NEXT:^~~~~~
ERR-VV-NEXT:<stdin>:1:1: note: with "NUM_OLD:0x10" equal to "16"
ERR-VV-NEXT:abc 16
ERR-VV-NEXT:^
ERR-VV-NEXT:<stdin>:1:1: note: captured var "STR_OLD"
ERR-VV-NEXT:abc 16
ERR-VV-NEXT:^~~
ERR-VV-NEXT:<stdin>:1:5: note: captured var "NUM_OLD"
ERR-VV-NEXT:abc 16
ERR-VV-NEXT: ^~
ERR-VV-NEXT:{{.*}}/check.txt:3:9: remark: CHECK: expected string found in input
ERR-VV-NEXT: CHECK: end
ERR-VV-NEXT: ^
ERR-VV-NEXT:<stdin>:2:1: note: found here
ERR-VV-NEXT:end
ERR-VV-NEXT:^~~
ERR-VV-NEXT:{{.*}}/check.txt:2:12: remark: CHECK-NOT: excluded string not found in input
ERR-VV-NEXT:CHECK-NOT: {{.*}}
ERR-VV-NEXT: ^
ERR-VV-NEXT:<stdin>:1:7: note: scanning from here
ERR-VV-NEXT:abc 16
ERR-VV-NEXT: ^
ERR-VV-NEXT:<stdin>:1:7: note: with "STR_OLD" equal to "abc"
ERR-VV-NEXT:abc 16
ERR-VV-NEXT: ^
ERR-VV-NEXT:<stdin>:1:7: note: with "NUM_OLD + 1" equal to "17"
ERR-VV-NEXT:abc 16
ERR-VV-NEXT: ^
ERR-VV-NEXT:<stdin>:1:7: note: with "NUM_NEW:456" equal to "456"
ERR-VV-NEXT:abc 16
ERR-VV-NEXT: ^
ERR-VV-NEXT:<stdin>:1:7: note: pattern attempts to capture variables: "STR_NEW", "clang", "NUM_NEW"
ERR-VV-NEXT:abc 16
ERR-VV-NEXT: ^
ERR-VV-NOT:{{.}}
ERR:{{.*}}/check.txt:4:9: error: CHECK: expected string not found in input
ERR-NEXT: CHECK: {{.*}}
ERR-NEXT: ^
ERR-NEXT:<stdin>:2:4: note: scanning from here
ERR-NEXT:end
ERR-NEXT: ^
ERR-NEXT:<stdin>:2:4: note: with "STR_OLD" equal to "abc"
ERR-NEXT:end
ERR-NEXT: ^
ERR-NEXT:<stdin>:2:4: note: with "NUM_OLD + 1" equal to "17"
ERR-NEXT:end
ERR-NEXT: ^
ERR-NEXT:<stdin>:2:4: note: with "NUM_NEW:456" equal to "456"
ERR-NEXT:end
ERR-NEXT: ^
ERR-NEXT:<stdin>:2:4: note: pattern attempts to capture variables: "STR_NEW", "clang", "NUM_NEW"
ERR-NEXT:end
ERR-NEXT: ^
ERR-NOT:{{.*}}{{error|note|remark|<stdin>}}:
DMP:<<<<<<
DMP-NEXT: 1: abc 16
DMP-VV-NEXT:check:1'0 ^~~~~~
DMP-VV-NEXT:check:1'1 with "NUM_OLD:0x10" equal to "16"
DMP-VV-NEXT:check:1'2 ^~~ captured var "STR_OLD"
DMP-VV-NEXT:check:1'3 ^~ captured var "NUM_OLD"
DMP-VV-NEXT:not:2'0 { } search range (exclusive bounds)
DMP-VV-NEXT:not:2'1 with "STR_OLD" equal to "abc"
DMP-VV-NEXT:not:2'2 with "NUM_OLD + 1" equal to "17"
DMP-VV-NEXT:not:2'3 with "NUM_NEW:456" equal to "456"
DMP-VV-NEXT:not:2'4 pattern attempts to capture variables: "STR_NEW", "clang", "NUM_NEW"
DMP-NEXT: 2: end
DMP-VV-NEXT:check:3 ^~~
DMP-NEXT:check:4'0 { } search range (exclusive bounds)
DMP-NEXT:check:4'1 error: no match found in search range
DMP-NEXT:check:4'2 with "STR_OLD" equal to "abc"
DMP-NEXT:check:4'3 with "NUM_OLD + 1" equal to "17"
DMP-NEXT:check:4'4 with "NUM_NEW:456" equal to "456"
DMP-NEXT:check:4'5 pattern attempts to capture variables: "STR_NEW", "clang", "NUM_NEW"
DMP-NEXT:>>>>>>
;--- check.txt
CHECK: [[STR_OLD:abc]] [[#NUM_OLD:0x10]]
CHECK-NOT: [[STR_OLD]] [[STR_NEW:xyz]] [[clang::optnone]] [[#NUM_OLD + 1]] [[#NUM_NEW:456]]
CHECK: end
CHECK: [[STR_OLD]] [[STR_NEW:xyz]] [[clang::optnone]] [[#NUM_OLD + 1]] [[#NUM_NEW:456]]
;--- input.txt
abc 16
end