813 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			813 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
;--------------------------------------------------
 | 
						|
; Use -strict-whitespace to check marker and note alignment here.
 | 
						|
; (Also check multiline marker where start/end columns vary across lines.)
 | 
						|
;
 | 
						|
; In the remaining checks, don't use -strict-whitespace and thus check just the
 | 
						|
; presence, order, and lengths of markers.  That way, if we ever change padding
 | 
						|
; within line labels, we don't have to adjust so many tests.
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; RUN: echo 'hello world' > %t.in
 | 
						|
; RUN: echo 'goodbye' >> %t.in
 | 
						|
; RUN: echo 'world' >> %t.in
 | 
						|
; RUN: echo 'unicorn' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK: hello' > %t.chk
 | 
						|
; RUN: echo 'CHECK: universe' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -strict-whitespace -match-full-lines -check-prefix=ALIGN \
 | 
						|
; RUN:             -implicit-check-not='remark:' %s
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; ALIGN:{{.*}}error:{{.*}}
 | 
						|
; ALIGN:{{.*}}possible intended match here{{.*}}
 | 
						|
 | 
						|
; ALIGN:Input was:
 | 
						|
; ALIGN-NEXT:<<<<<<
 | 
						|
; ALIGN-NEXT:           1: hello world 
 | 
						|
; ALIGN-NEXT:check:1       ^~~~~
 | 
						|
; ALIGN-NEXT:check:2'0          X~~~~~~ error: no match found
 | 
						|
; ALIGN-NEXT:           2: goodbye 
 | 
						|
; ALIGN-NEXT:check:2'0     ~~~~~~~~
 | 
						|
; ALIGN-NEXT:           3: world 
 | 
						|
; ALIGN-NEXT:check:2'0     ~~~~~~
 | 
						|
; ALIGN-NEXT:           4: unicorn 
 | 
						|
; ALIGN-NEXT:check:2'0     ~~~~~~~~
 | 
						|
; ALIGN-NEXT:check:2'1     ?        possible intended match
 | 
						|
; ALIGN-NEXT:>>>>>>
 | 
						|
; ALIGN-NOT:{{.}}
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; CHECK (also: multi-line search range, fuzzy match)
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; Good match and no match.
 | 
						|
 | 
						|
; RUN: echo 'hello'   > %t.in
 | 
						|
; RUN: echo 'again'   >> %t.in
 | 
						|
; RUN: echo 'whirled' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK: hello' > %t.chk
 | 
						|
; RUN: echo 'CHECK: world' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=CHK \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=CHK,CHK-V \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=CHK,CHK-V \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; CHK: {{.*}}error:{{.*}}
 | 
						|
; CHK: {{.*}}possible intended match here{{.*}}
 | 
						|
 | 
						|
; CHK:        <<<<<<
 | 
						|
; CHK-NEXT:              1: hello 
 | 
						|
; CHK-V-NEXT: check:1       ^~~~~
 | 
						|
; CHK-NEXT:   check:2'0          X error: no match found
 | 
						|
; CHK-NEXT:              2: again 
 | 
						|
; CHK-NEXT:   check:2'0     ~~~~~~
 | 
						|
; CHK-NEXT:              3: whirled 
 | 
						|
; CHK-NEXT:   check:2'0     ~~~~~~~~
 | 
						|
; CHK-NEXT:   check:2'1     ?        possible intended match
 | 
						|
; CHK-NEXT:   >>>>>>
 | 
						|
; CHK-NOT:    {{.}}
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; CHECK-COUNT-<num>
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; Good match and no match.
 | 
						|
 | 
						|
; RUN: echo 'pete'   > %t.in
 | 
						|
; RUN: echo 'repete' >> %t.in
 | 
						|
; RUN: echo 'repeat' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK-COUNT-3: pete' > %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=CNT,CNT-Q \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=CNT,CNT-V \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=CNT,CNT-V \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; CNT: {{.*}}error:{{.*}}
 | 
						|
 | 
						|
; CNT:          <<<<<<
 | 
						|
; CNT-NEXT:                1: pete 
 | 
						|
; CNT-V-NEXT:   count:1'0     ^~~~
 | 
						|
; CNT-NEXT:                2: repete 
 | 
						|
; CNT-V-NEXT:   count:1'1       ^~~~
 | 
						|
; CNT-Q-NEXT:   count:1'0           X error: no match found
 | 
						|
; CNT-V-NEXT:   count:1'2           X error: no match found
 | 
						|
; CNT-NEXT:                3: repeat 
 | 
						|
; CNT-Q-NEXT:   count:1'0     ~~~~~~~
 | 
						|
; CNT-Q-NEXT:   count:1'1     ?       possible intended match
 | 
						|
; CNT-V-NEXT:   count:1'2     ~~~~~~~
 | 
						|
; CNT-V-NEXT:   count:1'3     ?       possible intended match
 | 
						|
; CNT-NEXT:     >>>>>>
 | 
						|
; CNT-NOT:      {{.}}
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; CHECK-NEXT (also: EOF search-range, wrong-line match)
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; Good match and no match.
 | 
						|
 | 
						|
; RUN: echo 'hello' > %t.in
 | 
						|
; RUN: echo 'again' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK: hello' > %t.chk
 | 
						|
; RUN: echo 'CHECK-NEXT: again' >> %t.chk
 | 
						|
; RUN: echo 'CHECK-NEXT: world' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=NXT \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=NXT,NXT-V \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=NXT,NXT-V,NXT-VV \
 | 
						|
; RUN:             -implicit-check-not='remark:' -allow-unused-prefixes
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; NXT: {{.*}}error:{{.*}}
 | 
						|
 | 
						|
; NXT:        <<<<<<
 | 
						|
; NXT-NEXT:            1: hello 
 | 
						|
; NXT-V-NEXT: check:1     ^~~~~
 | 
						|
; NXT-NEXT:            2: again 
 | 
						|
; NXT-V-NEXT: next:2      ^~~~~
 | 
						|
; NXT-NEXT:   next:3           X error: no match found
 | 
						|
; NXT-NEXT:   >>>>>>
 | 
						|
; NXT-NOT:    {{.}}
 | 
						|
 | 
						|
; Wrong-line match.
 | 
						|
 | 
						|
; RUN: echo 'yonder' >> %t.in
 | 
						|
; RUN: echo 'world' >> %t.in
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=NXT2
 | 
						|
 | 
						|
; NXT2:      <<<<<<
 | 
						|
; NXT2-NEXT:         1: hello 
 | 
						|
; NXT2-NEXT:         2: again 
 | 
						|
; NXT2-NEXT:         3: yonder 
 | 
						|
; NXT2-NEXT:         4: world 
 | 
						|
; NXT2-NEXT: next:3     !~~~~  error: match on wrong line
 | 
						|
; NXT2-NEXT: >>>>>>
 | 
						|
; NXT2-NOT:  {{.}}
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; CHECK-SAME (also: multiple annotations per line, single-char search range,
 | 
						|
; wrong-line match)
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; Good match and no match.
 | 
						|
 | 
						|
; RUN: echo 'hello world!' > %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK: hello' > %t.chk
 | 
						|
; RUN: echo 'CHECK-SAME: world' >> %t.chk
 | 
						|
; RUN: echo 'CHECK-SAME: again' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=SAM \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=SAM,SAM-V \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=SAM,SAM-V,SAM-VV \
 | 
						|
; RUN:             -implicit-check-not='remark:' -allow-unused-prefixes
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; SAM: {{.*}}error:{{.*}}
 | 
						|
 | 
						|
; SAM:        <<<<<<
 | 
						|
; SAM-NEXT:            1: hello world! 
 | 
						|
; SAM-V-NEXT: check:1     ^~~~~
 | 
						|
; SAM-V-NEXT: same:2            ^~~~~
 | 
						|
; SAM-NEXT:   same:3                 X~ error: no match found
 | 
						|
; SAM-NEXT:   >>>>>>
 | 
						|
; SAM-NOT:    {{.}}
 | 
						|
 | 
						|
; Wrong-line match.
 | 
						|
 | 
						|
; RUN: echo 'again' >> %t.in
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=SAM2 \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; SAM2: {{.*}}error:{{.*}}
 | 
						|
 | 
						|
; SAM2:      <<<<<<
 | 
						|
; SAM2-NEXT:          1: hello world! 
 | 
						|
; SAM2-NEXT: check:1     ^~~~~
 | 
						|
; SAM2-NEXT: same:2            ^~~~~
 | 
						|
; SAM2-NEXT:          2: again 
 | 
						|
; SAM2-NEXT: same:3      !~~~~  error: match on wrong line
 | 
						|
; SAM2-NEXT: >>>>>>
 | 
						|
; SAM2-NOT:  {{.}}
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; CHECK-EMPTY (also: search range ends at label, single-char match, wrong-line
 | 
						|
; match)
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; Good match and no match.
 | 
						|
;
 | 
						|
; CHECK-EMPTY always seems to match an empty line at EOF (illegally when it's
 | 
						|
; not the next line) unless either (1) the last line is non-empty and has no
 | 
						|
; newline or (2) there's a CHECK-LABEL to end the search range before EOF.  We
 | 
						|
; choose scenario 2 to check the case of no match.
 | 
						|
 | 
						|
; RUN: echo 'hello' > %t.in
 | 
						|
; RUN: echo '' >> %t.in
 | 
						|
; RUN: echo 'world' >> %t.in
 | 
						|
; RUN: echo 'label' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK: hello' > %t.chk
 | 
						|
; RUN: echo 'CHECK-EMPTY:' >> %t.chk
 | 
						|
; RUN: echo 'CHECK-EMPTY:' >> %t.chk
 | 
						|
; RUN: echo 'CHECK-LABEL: label' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=EMP \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=EMP,EMP-V \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=EMP,EMP-V,EMP-VV \
 | 
						|
; RUN:             -implicit-check-not='remark:' -allow-unused-prefixes
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; EMP: {{.*}}error:{{.*}}
 | 
						|
 | 
						|
; EMP:        <<<<<<
 | 
						|
; EMP-NEXT:            1: hello 
 | 
						|
; EMP-V-NEXT: check:1     ^~~~~
 | 
						|
; EMP-NEXT:            2:
 | 
						|
; EMP-V-NEXT: empty:2     ^
 | 
						|
; EMP-NEXT:   empty:3          X error: no match found
 | 
						|
; EMP-NEXT:            3: world 
 | 
						|
; EMP-NEXT:   empty:3     ~~~~~~
 | 
						|
; EMP-NEXT:            4: label 
 | 
						|
; EMP-V-NEXT: label:4     ^~~~~
 | 
						|
; EMP-NEXT:   empty:3     ~~~~~
 | 
						|
; EMP-NEXT:   >>>>>>
 | 
						|
; EMP-NOT:    {{.}}
 | 
						|
 | 
						|
; Wrong-line match.
 | 
						|
 | 
						|
; RUN: echo 'hello' > %t.in
 | 
						|
; RUN: echo 'world' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK: hello' > %t.chk
 | 
						|
; RUN: echo 'CHECK-EMPTY:' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=EMP2 \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=EMP2,EMP2-V \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=EMP2,EMP2-V,EMP2-VV \
 | 
						|
; RUN:             -implicit-check-not='remark:' -allow-unused-prefixes
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; EMP2: {{.*}}error:{{.*}}
 | 
						|
 | 
						|
; EMP2:        <<<<<<
 | 
						|
; EMP2-NEXT:            1: hello 
 | 
						|
; EMP2-V-NEXT: check:1     ^~~~~
 | 
						|
; EMP2-NEXT:            2: world 
 | 
						|
; EMP2-NEXT:            3:
 | 
						|
; EMP2-NEXT:   empty:2     !      error: match on wrong line
 | 
						|
; EMP2-NEXT:   >>>>>>
 | 
						|
; EMP2-NOT:    {{.}}
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; CHECK-NOT (also: EOF pattern, and multiline range that ends before EOL)
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; No match (success) and unexpected match (error).
 | 
						|
 | 
						|
; RUN: echo 'hello' > %t.in
 | 
						|
; RUN: echo 'world' >> %t.in
 | 
						|
; RUN: echo 'again' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK-NOT: goodbye' > %t.chk
 | 
						|
; RUN: echo 'CHECK-NOT: world' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=NOT \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=NOT,NOT-V \
 | 
						|
; RUN:             -implicit-check-not='remark:' -allow-unused-prefixes
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=NOT,NOT-V,NOT-VV \
 | 
						|
; RUN:             -implicit-check-not='remark:' -allow-unused-prefixes
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; NOT: {{.*}}error:{{.*}}
 | 
						|
 | 
						|
; NOT:         <<<<<<
 | 
						|
; NOT-NEXT:           1: hello 
 | 
						|
; NOT-VV-NEXT: not:1     X~~~~~
 | 
						|
; NOT-NEXT:           2: world 
 | 
						|
; NOT-VV-NEXT: not:1     ~~~~~~
 | 
						|
; NOT-NEXT:    not:2     !~~~~  error: no match expected
 | 
						|
; NOT-NEXT:           3: again 
 | 
						|
; NOT-VV-NEXT: not:1     ~~~~~~
 | 
						|
; NOT-VV-NEXT:        4:
 | 
						|
; NOT-VV-NEXT: eof:2     ^
 | 
						|
; NOT-NEXT:    >>>>>>
 | 
						|
; NOT-NOT:     {{.}}
 | 
						|
 | 
						|
; Again, but with a CHECK instead of EOF as search range end.
 | 
						|
 | 
						|
; RUN: echo 'CHECK: ain' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=NOT2 \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=NOT2,NOT2-V \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=NOT2,NOT2-V,NOT2-VV \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; NOT2: {{.*}}error:{{.*}}
 | 
						|
 | 
						|
; NOT2:         <<<<<<
 | 
						|
; NOT2-NEXT:             1: hello 
 | 
						|
; NOT2-VV-NEXT: not:1       X~~~~~
 | 
						|
; NOT2-NEXT:             2: world 
 | 
						|
; NOT2-VV-NEXT: not:1       ~~~~~~
 | 
						|
; NOT2-NEXT:    not:2       !~~~~  error: no match expected
 | 
						|
; NOT2-NEXT:             3: again 
 | 
						|
; NOT2-V-NEXT:  check:3       ^~~
 | 
						|
; NOT2-VV-NEXT: not:1       ~~
 | 
						|
; NOT2-NEXT:    >>>>>>
 | 
						|
; NOT2-NOT:     {{.}}
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; CHECK-DAG (also: matches in different order than directives, discarded match)
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; Good match, discarded match plus good match, and no match.
 | 
						|
 | 
						|
; RUN: echo 'abc' > %t.in
 | 
						|
; RUN: echo 'def' >> %t.in
 | 
						|
; RUN: echo 'abc' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK-DAG: def' > %t.chk
 | 
						|
; RUN: echo 'CHECK-DAG: abc' >> %t.chk
 | 
						|
; RUN: echo 'CHECK-DAG: abc' >> %t.chk
 | 
						|
; RUN: echo 'CHECK-DAG: def' >> %t.chk
 | 
						|
 | 
						|
; Prefixes used here:
 | 
						|
; DAG    = quiet, -v, or -vv
 | 
						|
; DAG-Q  = quiet
 | 
						|
; DAG-V  = -v or -vv (-vv implies -v)
 | 
						|
; DAG-VQ = -v and not -vv
 | 
						|
; DAG-VV = -vv
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=DAG,DAG-Q \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=DAG,DAG-V,DAG-VQ \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=DAG,DAG-V,DAG-VV \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; DAG: {{.*}}error:{{.*}}
 | 
						|
 | 
						|
; DAG:         <<<<<<
 | 
						|
; DAG-NEXT:             1: abc 
 | 
						|
; DAG-V-NEXT:  dag:2       ^~~
 | 
						|
; DAG-VV-NEXT: dag:3'0     !~~  discard: overlaps earlier match
 | 
						|
; DAG-NEXT:             2: def 
 | 
						|
; DAG-V-NEXT:  dag:1       ^~~
 | 
						|
; DAG-VV-NEXT: dag:4'0     !~~  discard: overlaps earlier match
 | 
						|
; DAG-Q-NEXT:  dag:4          X error: no match found
 | 
						|
; DAG-VQ-NEXT: dag:4          X error: no match found
 | 
						|
; DAG-VV-NEXT: dag:4'1        X error: no match found
 | 
						|
; DAG-NEXT:             3: abc 
 | 
						|
; DAG-VQ-NEXT: dag:3       ^~~
 | 
						|
; DAG-VV-NEXT: dag:3'1     ^~~
 | 
						|
; DAG-Q-NEXT:  dag:4       ~~~~
 | 
						|
; DAG-VQ-NEXT: dag:4       ~~~~
 | 
						|
; DAG-VV-NEXT: dag:4'1     ~~~~
 | 
						|
; DAG-NEXT:    >>>>>>
 | 
						|
; DAG-NOT:     {{.}}
 | 
						|
 | 
						|
; Check sorting of annotations when the order of diagnostics across an input
 | 
						|
; line is different than the order of the associated directives in the check
 | 
						|
; file.  Try cases when diagnostics' input ranges overlap but are not
 | 
						|
; identical to check how that affects sorting.
 | 
						|
 | 
						|
; RUN: echo 'abc def abc def' > %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK-DAG: def' > %t.chk
 | 
						|
; RUN: echo 'CHECK-DAG: bc' >> %t.chk
 | 
						|
; RUN: echo 'CHECK-DAG: abc' >> %t.chk
 | 
						|
; RUN: echo 'CHECK-DAG: de' >> %t.chk
 | 
						|
; RUN: echo 'CHECK-DAG: def' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=DAG1L,DAG1L-Q \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=DAG1L,DAG1L-V,DAG1L-VQ \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=DAG1L,DAG1L-V,DAG1L-VV \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; DAG1L:{{.*}}error:{{.*}}
 | 
						|
 | 
						|
;         DAG1L:<<<<<<
 | 
						|
;    DAG1L-NEXT:         1: abc def abc def 
 | 
						|
;  DAG1L-V-NEXT:dag:1           ^~~
 | 
						|
;  DAG1L-V-NEXT:dag:2        ^~
 | 
						|
; DAG1L-VV-NEXT:dag:3'0     !~~              discard: overlaps earlier match
 | 
						|
; DAG1L-VQ-NEXT:dag:3               ^~~
 | 
						|
; DAG1L-VV-NEXT:dag:3'1             ^~~
 | 
						|
; DAG1L-VV-NEXT:dag:4'0         !~           discard: overlaps earlier match
 | 
						|
; DAG1L-VQ-NEXT:dag:4                   ^~
 | 
						|
; DAG1L-VV-NEXT:dag:4'1                 ^~
 | 
						|
; DAG1L-VV-NEXT:dag:5'0         !~~          discard: overlaps earlier match
 | 
						|
; DAG1L-VV-NEXT:dag:5'1                 !~~  discard: overlaps earlier match
 | 
						|
;  DAG1L-Q-NEXT:dag:5                     X~ error: no match found
 | 
						|
; DAG1L-VQ-NEXT:dag:5                     X~ error: no match found
 | 
						|
; DAG1L-VV-NEXT:dag:5'2                   X~ error: no match found
 | 
						|
;    DAG1L-NEXT:>>>>>>
 | 
						|
;     DAG1L-NOT:{{.}}
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; CHECK-LABEL
 | 
						|
;
 | 
						|
; FIXME: Labels sometimes produce redundant diagnostics for good matches.
 | 
						|
; That bug is independent of but affects -dump-input.
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; Good match and no match.
 | 
						|
 | 
						|
; RUN: echo 'lab0' > %t.in
 | 
						|
; RUN: echo 'foo' >> %t.in
 | 
						|
; RUN: echo 'lab1' >> %t.in
 | 
						|
; RUN: echo 'bar' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK-LABEL: lab0' > %t.chk
 | 
						|
; RUN: echo 'CHECK: foo' >> %t.chk
 | 
						|
; RUN: echo 'CHECK-LABEL: lab2' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=LAB \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -v 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=LAB,LAB-V \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=LAB,LAB-V,LAB-VV \
 | 
						|
; RUN:             -implicit-check-not='remark:' -allow-unused-prefixes
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; LAB: {{.*}}error:{{.*}}
 | 
						|
; LAB: {{.*}}possible intended match{{.*}}
 | 
						|
 | 
						|
; LAB:         <<<<<<
 | 
						|
; LAB-NEXT:               1: lab0 
 | 
						|
; LAB-V-NEXT:  label:1'0     ^~~~
 | 
						|
; LAB-V-NEXT:  label:1'1     ^~~~
 | 
						|
; LAB-NEXT:    label:3'0         X error: no match found
 | 
						|
; LAB-NEXT:               2: foo 
 | 
						|
; LAB-NEXT:    label:3'0     ~~~~
 | 
						|
; LAB-NEXT:               3: lab1 
 | 
						|
; LAB-NEXT:    label:3'0     ~~~~~
 | 
						|
; LAB-NEXT:    label:3'1     ?     possible intended match
 | 
						|
; LAB-NEXT:               4: bar 
 | 
						|
; LAB-NEXT:    label:3'0     ~~~~
 | 
						|
; LAB-NEXT:    >>>>>>
 | 
						|
; LAB-NOT:     {{.}}
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; --implicit-check-not
 | 
						|
;
 | 
						|
; The first two --implicit-check-not patterns have no match (success).  The
 | 
						|
; third has an unexpected match (error).  To check per-input-line annotation
 | 
						|
; sorting, all of those plus the CHECK directives have annotations on the same
 | 
						|
; input line.
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; RUN: echo 'hello world again!' > %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK: hel' > %t.chk
 | 
						|
; RUN: echo 'CHECK: wor' >> %t.chk
 | 
						|
; RUN: echo 'CHECK: !' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file=%t.in %t.chk 2>&1 \
 | 
						|
; RUN:               --implicit-check-not='goodbye' \
 | 
						|
; RUN:               --implicit-check-not='world' \
 | 
						|
; RUN:               --implicit-check-not='again' \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=IMPNOT \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file=%t.in %t.chk -v 2>&1 \
 | 
						|
; RUN:               --implicit-check-not='goodbye' \
 | 
						|
; RUN:               --implicit-check-not='world' \
 | 
						|
; RUN:               --implicit-check-not='again' \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefixes=IMPNOT,IMPNOT-V \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -input-file=%t.in %t.chk -vv 2>&1 \
 | 
						|
; RUN:               --implicit-check-not='goodbye' \
 | 
						|
; RUN:               --implicit-check-not='world' \
 | 
						|
; RUN:               --implicit-check-not='again' \
 | 
						|
; RUN: | FileCheck -match-full-lines %s \
 | 
						|
; RUN:             -check-prefixes=IMPNOT,IMPNOT-V,IMPNOT-VV \
 | 
						|
; RUN:             -implicit-check-not='remark:'
 | 
						|
 | 
						|
; Verbose diagnostics are suppressed but not errors.
 | 
						|
; IMPNOT:{{.*}}error:{{.*}}
 | 
						|
 | 
						|
;         IMPNOT:<<<<<<
 | 
						|
;    IMPNOT-NEXT:          1: hello world again! 
 | 
						|
;  IMPNOT-V-NEXT:check:1      ^~~
 | 
						|
; IMPNOT-VV-NEXT:not:imp1     X
 | 
						|
; IMPNOT-VV-NEXT:not:imp2     X
 | 
						|
; IMPNOT-VV-NEXT:not:imp3     X
 | 
						|
;  IMPNOT-V-NEXT:check:2            ^~~
 | 
						|
; IMPNOT-VV-NEXT:not:imp1        X~~
 | 
						|
; IMPNOT-VV-NEXT:not:imp2        X~~
 | 
						|
; IMPNOT-VV-NEXT:not:imp3        X~~
 | 
						|
;  IMPNOT-V-NEXT:check:3                       ^
 | 
						|
; IMPNOT-VV-NEXT:not:imp1              X~~~~~~~
 | 
						|
; IMPNOT-VV-NEXT:not:imp2              X~~~~~~~
 | 
						|
;    IMPNOT-NEXT:not:imp3                 !~~~~   error: no match expected
 | 
						|
;    IMPNOT-NEXT:>>>>>>
 | 
						|
;     IMPNOT-NOT:{{.}}
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; Substitutions: successful and failed positive directives.
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; RUN: echo 'def-match1 def-match2'  >  %t.in
 | 
						|
; RUN: echo 'def-match1 def-nomatch' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK: [[DEF_MATCH1]] [[DEF_MATCH2]]'            >  %t.chk
 | 
						|
; RUN: echo 'CHECK: [[DEF_MATCH1]] [[UNDEF]] [[DEF_NOMATCH]]' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -vv -input-file=%t.in %t.chk 2>&1 \
 | 
						|
; RUN:               -DDEF_MATCH1=def-match1 -DDEF_MATCH2=def-match2 \
 | 
						|
; RUN:               -DDEF_NOMATCH=foobar \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=SUBST-POS
 | 
						|
 | 
						|
;      SUBST-POS:<<<<<<
 | 
						|
; SUBST-POS-NEXT:           1: def-match1 def-match2 
 | 
						|
; SUBST-POS-NEXT:check:1'0     ^~~~~~~~~~~~~~~~~~~~~
 | 
						|
; SUBST-POS-NEXT:check:1'1                            with "DEF_MATCH1" equal to "def-match1"
 | 
						|
; SUBST-POS-NEXT:check:1'2                            with "DEF_MATCH2" equal to "def-match2"
 | 
						|
; SUBST-POS-NEXT:check:2'0                          X error: no match found
 | 
						|
; SUBST-POS-NEXT:check:2'1                            with "DEF_MATCH1" equal to "def-match1"
 | 
						|
; SUBST-POS-NEXT:check:2'2                            uses undefined variable(s): "UNDEF"
 | 
						|
; SUBST-POS-NEXT:check:2'3                            with "DEF_NOMATCH" equal to "foobar"
 | 
						|
; SUBST-POS-NEXT:           2: def-match1 def-nomatch 
 | 
						|
; SUBST-POS-NEXT:check:2'0     ~~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
; SUBST-POS-NEXT:check:2'4              ?              possible intended match
 | 
						|
; SUBST-POS-NEXT:>>>>>>
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; Substitutions: successful and failed negative directives.
 | 
						|
;
 | 
						|
; FIXME: The first CHECK-NOT directive below uses an undefined variable.
 | 
						|
; Because it therefore cannot match regardless of the input, the directive
 | 
						|
; succeeds.  However, it should fail in this case.  Update the example below
 | 
						|
; once that's fixed.
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; RUN: echo 'def-match1 def-nomatch' >  %t.in
 | 
						|
; RUN: echo 'def-match1 def-match2'  >> %t.in
 | 
						|
; RUN: echo 'END'                    >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK-NOT: [[DEF_MATCH1]] [[UNDEF]] [[DEF_NOMATCH]]' >  %t.chk
 | 
						|
; RUN: echo 'CHECK-NOT: [[DEF_MATCH1]] [[DEF_MATCH2]]'            >> %t.chk
 | 
						|
; RUN: echo 'CHECK: END'                                          >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -vv -input-file=%t.in %t.chk 2>&1 \
 | 
						|
; RUN:               -DDEF_MATCH1=def-match1 -DDEF_MATCH2=def-match2 \
 | 
						|
; RUN:               -DDEF_NOMATCH=foobar \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=SUBST-NEG
 | 
						|
 | 
						|
;      SUBST-NEG:<<<<<<
 | 
						|
; SUBST-NEG-NEXT:         1: def-match1 def-nomatch 
 | 
						|
; SUBST-NEG-NEXT:not:1'0     X~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
; SUBST-NEG-NEXT:not:1'1                             with "DEF_MATCH1" equal to "def-match1"
 | 
						|
; SUBST-NEG-NEXT:not:1'2                             uses undefined variable(s): "UNDEF"
 | 
						|
; SUBST-NEG-NEXT:not:1'3                             with "DEF_NOMATCH" equal to "foobar"
 | 
						|
; SUBST-NEG-NEXT:         2: def-match1 def-match2 
 | 
						|
; SUBST-NEG-NEXT:not:1'0     ~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
; SUBST-NEG-NEXT:not:2'0     !~~~~~~~~~~~~~~~~~~~~  error: no match expected
 | 
						|
; SUBST-NEG-NEXT:not:2'1                            with "DEF_MATCH1" equal to "def-match1"
 | 
						|
; SUBST-NEG-NEXT:not:2'2                            with "DEF_MATCH2" equal to "def-match2"
 | 
						|
; SUBST-NEG-NEXT:         3: END 
 | 
						|
; SUBST-NEG-NEXT:check:3     ^~~
 | 
						|
; SUBST-NEG-NEXT:>>>>>>
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; Captured variables
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
; RUN: echo 'strvar: foo'           >  %t.in
 | 
						|
; RUN: echo 'numvar no expr: 51'    >> %t.in
 | 
						|
; RUN: echo 'numvar expr: -49'      >> %t.in
 | 
						|
; RUN: echo 'many: foo 100 8 bar'   >> %t.in
 | 
						|
; RUN: echo 'var in neg match: foo' >> %t.in
 | 
						|
; RUN: echo 'END'                   >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK: strvar: [[STRVAR:[a-z]+]]'                         >  %t.chk
 | 
						|
; RUN: echo 'CHECK: numvar no expr: [[#NUMVAR_NO_EXPR:]]'              >> %t.chk
 | 
						|
; RUN: echo 'CHECK: numvar expr: [[#%d,NUMVAR_EXPR:2-NUMVAR_NO_EXPR]]' >> %t.chk
 | 
						|
 | 
						|
; Capture many variables of different kinds in a different order than their
 | 
						|
; names sort alphabetically to ensure they're sorted in capture order.
 | 
						|
; RUN: echo 'CHECK: many: [[VAR1:foo]] [[#%d,VAR3:]] [[#VAR2:]] [[VAR4:bar]]' \
 | 
						|
; RUN:      >> %t.chk
 | 
						|
 | 
						|
; RUN: echo 'CHECK-NOT: var in neg match: [[VAR:foo]]' >> %t.chk
 | 
						|
; RUN: echo 'CHECK: END'                               >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -vv -input-file=%t.in %t.chk 2>&1 \
 | 
						|
; RUN: | FileCheck -strict-whitespace -match-full-lines %s -check-prefix=CAPTURE-NEG
 | 
						|
 | 
						|
;      CAPTURE-NEG:<<<<<<
 | 
						|
; CAPTURE-NEG-NEXT:           1: strvar: foo 
 | 
						|
; CAPTURE-NEG-NEXT:check:1'0     ^~~~~~~~~~~
 | 
						|
; CAPTURE-NEG-NEXT:check:1'1             ^~~  captured var "STRVAR"
 | 
						|
; CAPTURE-NEG-NEXT:           2: numvar no expr: 51 
 | 
						|
; CAPTURE-NEG-NEXT:check:2'0     ^~~~~~~~~~~~~~~~~~
 | 
						|
; CAPTURE-NEG-NEXT:check:2'1                     ^~  captured var "NUMVAR_NO_EXPR"
 | 
						|
; CAPTURE-NEG-NEXT:           3: numvar expr: -49 
 | 
						|
; CAPTURE-NEG-NEXT:check:3'0     ^~~~~~~~~~~~~~~~
 | 
						|
; CAPTURE-NEG-NEXT:check:3'1                       with "%d,NUMVAR_EXPR:2-NUMVAR_NO_EXPR" equal to "-49"
 | 
						|
; CAPTURE-NEG-NEXT:check:3'2                  ^~~  captured var "NUMVAR_EXPR"
 | 
						|
; CAPTURE-NEG-NEXT:           4: many: foo 100 8 bar 
 | 
						|
; CAPTURE-NEG-NEXT:check:4'0     ^~~~~~~~~~~~~~~~~~~
 | 
						|
; CAPTURE-NEG-NEXT:check:4'1           ^~~            captured var "VAR1"
 | 
						|
; CAPTURE-NEG-NEXT:check:4'2               ^~~        captured var "VAR3"
 | 
						|
; CAPTURE-NEG-NEXT:check:4'3                   ^      captured var "VAR2"
 | 
						|
; CAPTURE-NEG-NEXT:check:4'4                     ^~~  captured var "VAR4"
 | 
						|
; CAPTURE-NEG-NEXT:           5: var in neg match: foo 
 | 
						|
; CAPTURE-NEG-NEXT:not:5'0       !~~~~~~~~~~~~~~~~~~~~  error: no match expected
 | 
						|
; CAPTURE-NEG-NEXT:not:5'1                         !~~  captured var "VAR"
 | 
						|
; CAPTURE-NEG-NEXT:           6: END 
 | 
						|
; CAPTURE-NEG-NEXT:check:6       ^~~
 | 
						|
; CAPTURE-NEG-NEXT:>>>>>>
 | 
						|
 | 
						|
;--------------------------------------------------
 | 
						|
; CHECK-NEXT, CHECK-SAME, CHECK-DAG note fixups.
 | 
						|
;
 | 
						|
; When CHECK-NEXT or CHECK-SAME fails for the wrong line, or when a CHECK-DAG
 | 
						|
; match is discarded, the associated diagnostic type must be converted from
 | 
						|
; successful to failed or discarded.  However, any note annotation must be
 | 
						|
; traversed to find that diagnostic.  We check this behavior here only for
 | 
						|
; substitutions, but it's the same mechanism for all note annotations.
 | 
						|
;--------------------------------------------------
 | 
						|
 | 
						|
;- - - - - - - - - - - - - - - - - - - - - - - - -
 | 
						|
; CHECK-NEXT.
 | 
						|
;- - - - - - - - - - - - - - - - - - - - - - - - -
 | 
						|
 | 
						|
; RUN: echo 'pre var' > %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK: pre'          >  %t.chk
 | 
						|
; RUN: echo 'CHECK-NEXT: [[VAR]]' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -vv -input-file=%t.in %t.chk 2>&1 \
 | 
						|
; RUN:               -DVAR=var \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=SUBST_NEXT
 | 
						|
 | 
						|
;      SUBST_NEXT:<<<<<<
 | 
						|
; SUBST_NEXT-NEXT:          1: pre var 
 | 
						|
; SUBST_NEXT-NEXT:check:1      ^~~
 | 
						|
; SUBST_NEXT-NEXT:next:2'0         !~~  error: match on wrong line
 | 
						|
; SUBST_NEXT-NEXT:next:2'1              with "VAR" equal to "var"
 | 
						|
; SUBST_NEXT-NEXT:>>>>>>
 | 
						|
 | 
						|
;- - - - - - - - - - - - - - - - - - - - - - - - -
 | 
						|
; CHECK-SAME.
 | 
						|
;- - - - - - - - - - - - - - - - - - - - - - - - -
 | 
						|
 | 
						|
; RUN: echo 'pre' >  %t.in
 | 
						|
; RUN: echo 'var' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK: pre'          >  %t.chk
 | 
						|
; RUN: echo 'CHECK-SAME: [[VAR]]' >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: not FileCheck -dump-input=always -vv -input-file=%t.in %t.chk 2>&1 \
 | 
						|
; RUN:               -DVAR=var \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=SUBST_SAME
 | 
						|
 | 
						|
;      SUBST_SAME:<<<<<<
 | 
						|
; SUBST_SAME-NEXT:          1: pre 
 | 
						|
; SUBST_SAME-NEXT:check:1      ^~~
 | 
						|
; SUBST_SAME-NEXT:          2: var 
 | 
						|
; SUBST_SAME-NEXT:same:2'0     !~~  error: match on wrong line
 | 
						|
; SUBST_SAME-NEXT:same:2'1          with "VAR" equal to "var"
 | 
						|
; SUBST_SAME-NEXT:>>>>>>
 | 
						|
 | 
						|
;- - - - - - - - - - - - - - - - - - - - - - - - -
 | 
						|
; CHECK-DAG.
 | 
						|
;- - - - - - - - - - - - - - - - - - - - - - - - -
 | 
						|
 | 
						|
; RUN: echo 'var' >  %t.in
 | 
						|
; RUN: echo 'var' >> %t.in
 | 
						|
; RUN: echo 'END' >> %t.in
 | 
						|
 | 
						|
; RUN: echo 'CHECK-DAG: var'      >  %t.chk
 | 
						|
; RUN: echo 'CHECK-DAG: [[VAR]]'  >> %t.chk
 | 
						|
; RUN: echo 'CHECK: END'          >> %t.chk
 | 
						|
 | 
						|
; RUN: %ProtectFileCheckOutput \
 | 
						|
; RUN: FileCheck -dump-input=always -vv -input-file=%t.in %t.chk 2>&1 \
 | 
						|
; RUN:           -DVAR=var \
 | 
						|
; RUN: | FileCheck -match-full-lines %s -check-prefix=SUBST_DAG
 | 
						|
 | 
						|
;      SUBST_DAG:<<<<<<
 | 
						|
; SUBST_DAG-NEXT:         1: var 
 | 
						|
; SUBST_DAG-NEXT:dag:1       ^~~
 | 
						|
; SUBST_DAG-NEXT:dag:2'0     !~~  discard: overlaps earlier match
 | 
						|
; SUBST_DAG-NEXT:dag:2'1          with "VAR" equal to "var"
 | 
						|
; SUBST_DAG-NEXT:         2: var 
 | 
						|
; SUBST_DAG-NEXT:dag:2'2     ^~~
 | 
						|
; SUBST_DAG-NEXT:dag:2'3          with "VAR" equal to "var"
 | 
						|
; SUBST_DAG-NEXT:         3: END 
 | 
						|
; SUBST_DAG-NEXT:check:3     ^~~
 | 
						|
; SUBST_DAG-NEXT:>>>>>>
 |