| ;-------------------------------------------------- | 
 | ; Input file, check file, and directives for checking the size of the context. | 
 | ; | 
 | ; These are designed to be used with -dump-input=fail -vv. | 
 | ; | 
 | ; In the resulting input dump, there are three potential ellipses: | 
 | ; | 
 | ; - S: At the start of the input. | 
 | ; - M: Between two input lines included by the filter. | 
 | ; - E: At the end of the input. | 
 | ; | 
 | ; They are all present at -dump-input-context=4.  One becomes useless each time | 
 | ; -dump-input-context is incremented beyond that because then that ellipsis | 
 | ; becomes equal to or larger than the input lines it elides. | 
 | ;-------------------------------------------------- | 
 |  | 
 | ; RUN: echo foo8       >  %t.in | 
 | ; RUN: echo foo7       >> %t.in | 
 | ; RUN: echo foo6       >> %t.in | 
 | ; RUN: echo foo5       >> %t.in | 
 | ; RUN: echo foo4       >> %t.in | 
 | ; RUN: echo foo3       >> %t.in | 
 | ; RUN: echo foo2       >> %t.in | 
 | ; RUN: echo foo1       >> %t.in | 
 | ; RUN: echo lab1 hello >> %t.in | 
 | ; RUN: echo foo1       >> %t.in | 
 | ; RUN: echo foo2       >> %t.in | 
 | ; RUN: echo foo3       >> %t.in | 
 | ; RUN: echo foo4       >> %t.in | 
 | ; RUN: echo foo5       >> %t.in | 
 | ; RUN: echo foo6       >> %t.in | 
 | ; RUN: echo foo7       >> %t.in | 
 | ; RUN: echo foo7       >> %t.in | 
 | ; RUN: echo foo6       >> %t.in | 
 | ; RUN: echo foo5       >> %t.in | 
 | ; RUN: echo foo4       >> %t.in | 
 | ; RUN: echo foo3       >> %t.in | 
 | ; RUN: echo foo2       >> %t.in | 
 | ; RUN: echo foo1       >> %t.in | 
 | ; RUN: echo lab2 world >> %t.in | 
 | ; RUN: echo foo1       >> %t.in | 
 | ; RUN: echo foo2       >> %t.in | 
 | ; RUN: echo foo3       >> %t.in | 
 | ; RUN: echo foo4       >> %t.in | 
 | ; RUN: echo foo5       >> %t.in | 
 | ; RUN: echo foo6       >> %t.in | 
 | ; RUN: echo foo7       >> %t.in | 
 | ; RUN: echo foo8       >> %t.in | 
 | ; RUN: echo foo9       >> %t.in | 
 | ; RUN: echo foo0       >> %t.in | 
 |  | 
 | ; RUN: echo 'CHECK-LABEL: lab1'  >  %t.chk | 
 | ; RUN: echo ' CHECK-NEXT: hello' >> %t.chk | 
 | ; RUN: echo 'CHECK-LABEL: lab2'  >> %t.chk | 
 | ; RUN: echo ' CHECK-NEXT: world' >> %t.chk | 
 |  | 
 | ;      C0: <<<<<< | 
 | ; CS-NEXT:            . | 
 | ; CS-NEXT:            . | 
 | ; CS-NEXT:            . | 
 | ; C5-NEXT:            1: foo8  | 
 | ; C5-NEXT:            2: foo7  | 
 | ; C5-NEXT:            3: foo6  | 
 | ; C5-NEXT:            4: foo5  | 
 | ; C4-NEXT:            5: foo4  | 
 | ; C3-NEXT:            6: foo3  | 
 | ; C2-NEXT:            7: foo2  | 
 | ; C1-NEXT:            8: foo1  | 
 | ; C0-NEXT:            9: lab1 hello  | 
 | ; C0-NEXT: label:1'0     ^~~~ | 
 | ; C0-NEXT: label:1'1     ^~~~ | 
 | ; C0-NEXT: next:2             !~~~~  error: match on wrong line | 
 | ; C1-NEXT:           10: foo1  | 
 | ; C2-NEXT:           11: foo2  | 
 | ; C3-NEXT:           12: foo3  | 
 | ; C4-NEXT:           13: foo4  | 
 | ; C5-NEXT:           14: foo5  | 
 | ; C6-NEXT:           15: foo6  | 
 | ; C6-NEXT:           16: foo7  | 
 | ; CM-NEXT:            . | 
 | ; CM-NEXT:            . | 
 | ; CM-NEXT:            . | 
 | ; C6-NEXT:           17: foo7  | 
 | ; C6-NEXT:           18: foo6  | 
 | ; C5-NEXT:           19: foo5  | 
 | ; C4-NEXT:           20: foo4  | 
 | ; C3-NEXT:           21: foo3  | 
 | ; C2-NEXT:           22: foo2  | 
 | ; C1-NEXT:           23: foo1  | 
 | ; C0-NEXT:           24: lab2 world  | 
 | ; C0-NEXT: label:3       ^~~~ | 
 | ; C0-NEXT: next:4             !~~~~  error: match on wrong line | 
 | ; C1-NEXT:           25: foo1  | 
 | ; C2-NEXT:           26: foo2  | 
 | ; C3-NEXT:           27: foo3  | 
 | ; C4-NEXT:           28: foo4  | 
 | ; C5-NEXT:           29: foo5  | 
 | ; C6-NEXT:           30: foo6  | 
 | ; C7-NEXT:           31: foo7  | 
 | ; C7-NEXT:           32: foo8  | 
 | ; C7-NEXT:           33: foo9  | 
 | ; C7-NEXT:           34: foo0  | 
 | ; CE-NEXT:            . | 
 | ; CE-NEXT:            . | 
 | ; CE-NEXT:            . | 
 | ; C0-NEXT: >>>>>> | 
 |  | 
 | ; Now build an alternate set of checks where input lines that might be elided by | 
 | ; ellipses have annotations. | 
 |  | 
 | ; RUN: cp %t.in %t.wide.in | 
 | ; RUN: echo 'CHECK-LABEL: lab1'    >  %t.wide.chk | 
 | ; RUN: echo '      CHECK: hello'   >> %t.wide.chk | 
 | ; RUN: echo '      CHECK: goodbye' >> %t.wide.chk | 
 | ; RUN: echo 'CHECK-LABEL: lab2'    >> %t.wide.chk | 
 | ; RUN: echo ' CHECK-NEXT: world'   >> %t.wide.chk | 
 |  | 
 | ;      W5: <<<<<< | 
 | ;      W5:            9: lab1 hello  | 
 | ; W5-NEXT: label:1'0     ^~~~ | 
 | ; W5-NEXT: label:1'1     ^~~~ | 
 | ; W5-NEXT: check:2            ^~~~~ | 
 | ; W5-NEXT: check:3'0               X error: no match found | 
 | ; W5-NEXT:           10: foo1  | 
 | ; W5-NEXT: check:3'0     ~~~~~ | 
 | ; W5-NEXT: check:3'1     ?     possible intended match | 
 | ; W5-NEXT:           11: foo2  | 
 | ; W5-NEXT: check:3'0     ~~~~~ | 
 | ; W5-NEXT:           12: foo3  | 
 | ; W5-NEXT: check:3'0     ~~~~~ | 
 | ; W5-NEXT:           13: foo4  | 
 | ; W5-NEXT: check:3'0     ~~~~~ | 
 | ; W5-NEXT:           14: foo5  | 
 | ; W5-NEXT: check:3'0     ~~~~~ | 
 | ; W5-NEXT:           15: foo6  | 
 | ; W5-NEXT: check:3'0     ~~~~~ | 
 | ; W6-NEXT:           16: foo7  | 
 | ; W6-NEXT: check:3'0     ~~~~~ | 
 | ; WM-NEXT:            . | 
 | ; WM-NEXT:            . | 
 | ; WM-NEXT:            . | 
 | ; W6-NEXT:           17: foo7  | 
 | ; W6-NEXT: check:3'0     ~~~~~ | 
 | ; W6-NEXT:           18: foo6  | 
 | ; W6-NEXT: check:3'0     ~~~~~ | 
 | ; W5-NEXT:           19: foo5  | 
 | ; W5-NEXT: check:3'0     ~~~~~ | 
 | ; W5-NEXT:           20: foo4  | 
 | ; W5-NEXT: check:3'0     ~~~~~ | 
 | ; W5-NEXT:           21: foo3  | 
 | ; W5-NEXT: check:3'0     ~~~~~ | 
 | ; W5-NEXT:           22: foo2  | 
 | ; W5-NEXT: check:3'0     ~~~~~ | 
 | ; W5-NEXT:           23: foo1  | 
 | ; W5-NEXT: check:3'0     ~~~~~ | 
 | ; W5-NEXT:           24: lab2 world  | 
 | ; W5-NEXT: label:4       ^~~~ | 
 | ; W5-NEXT: check:3'0     ~~~~ | 
 | ; W5-NEXT: next:5             !~~~~  error: match on wrong line | 
 |  | 
 | ;-------------------------------------------------- | 
 | ; Check -dump-input-context=<bad value>. | 
 | ;-------------------------------------------------- | 
 |  | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=-1 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefix=BADVAL -DVAL=-1 | 
 |  | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=foobar \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefix=BADVAL -DVAL=foobar | 
 |  | 
 | BADVAL: {{F|f}}ile{{C|c}}heck{{.*}}: for the --dump-input-context option: '[[VAL]]' value invalid for uint argument! | 
 |  | 
 | ;-------------------------------------------------- | 
 | ; Check -dump-input-context explicit values. | 
 | ;-------------------------------------------------- | 
 |  | 
 | ; 0 is an important boundary case. | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv  %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=0 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,CS,CM,CE | 
 |  | 
 | ; 1 is an important boundary case. | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=1 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,CS,CM,CE | 
 |  | 
 | ; 4 is the boundary case at which all ellipses are present in our test. | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=4 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,C2,C3,C4,CS,CM,CE | 
 |  | 
 | ; 5 is the boundary case at which the start ellipsis is useless. | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=5 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,C2,C3,C4,C5,CM,CE | 
 |  | 
 | ; 6 is the boundary case at which the middle ellipsis is useless. | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=6 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,C2,C3,C4,C5,C6,CE | 
 |  | 
 | ; 7 is the boundary case at which the end ellipsis is useless. | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=7 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,C2,C3,C4,C5,C6,C7 | 
 |  | 
 | ; Make sure all is fine when -dump-input-context is far larger than the input. | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=200 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,C2,C3,C4,C5,C6,C7 | 
 |  | 
 | ;-------------------------------------------------- | 
 | ; Check that -dump-input-context default is 5. | 
 | ;-------------------------------------------------- | 
 |  | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,C2,C3,C4,C5,CM,CE | 
 |  | 
 | ;-------------------------------------------------- | 
 | ; Check multiple -dump-input-context options. | 
 | ; | 
 | ; This might occur when a test author specifies -dump-input-context on a | 
 | ; specific FileCheck call while a test runner specifies -dump-input-context in | 
 | ; FILECHECK_OPTS, but check the behavior generally. | 
 | ; | 
 | ; The largest value wins because it provides the most information. | 
 | ;-------------------------------------------------- | 
 |  | 
 | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
 | ; Check duplicate. | 
 | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
 |  | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=1 -dump-input-context=1 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,CS,CM,CE | 
 |  | 
 | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
 | ; Check precedence. | 
 | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
 |  | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=0 -dump-input-context=1 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,CS,CM,CE | 
 |  | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=1 -dump-input-context=0 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,CS,CM,CE | 
 |  | 
 | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
 | ; Check that FILECHECK_OPTS isn't handled differently. | 
 | ;- - - - - - - - - - - - - - - - - - - - - - - - - | 
 |  | 
 | ; RUN: %ProtectFileCheckOutput FILECHECK_OPTS=-dump-input-context=0 \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=1 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,CS,CM,CE | 
 |  | 
 | ; RUN: %ProtectFileCheckOutput FILECHECK_OPTS=-dump-input-context=1 \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.chk < %t.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=0 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=C0,C1,CS,CM,CE | 
 |  | 
 | ;-------------------------------------------------- | 
 | ; Check how annotations on input lines that might be elided by ellipses affect | 
 | ; whether they are actually elided. | 
 | ;-------------------------------------------------- | 
 |  | 
 | ; At -dump-input-context=5, the ellipsis is useful but only when annotations on | 
 | ; elided input lines are considered. | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.wide.chk < %t.wide.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=5 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=W5,WM | 
 |  | 
 | ; At -dump-input-context=6, the ellipsis is not useful even when annotations on | 
 | ; elided input lines are considered. | 
 | ; RUN: %ProtectFileCheckOutput \ | 
 | ; RUN: not FileCheck -dump-input=fail -vv %t.wide.chk < %t.wide.in 2>&1 \ | 
 | ; RUN:               -dump-input-context=6 \ | 
 | ; RUN: | FileCheck %s -match-full-lines -check-prefixes=W5,W6 |