In input dump annotations, check:2'1 indicates diagnostic 1 for the
CHECK directive on check file line 2. Without this patch,
-dump-input computes the diagnostic index with the assumption that
FileCheck *consecutively* produces all diagnostics for the same
pattern. Already, that can be a false assumption, as in the examples
below. Moreover, it seems like a brittle assumption as FileCheck
evolves. Finally, it actually complicates the implementation even if
it makes it slightly more efficient.
This patch avoids that assumption. Examples below show results after
applying this patch. Before applying this patch, 'N is omitted
throughout these examples because the implementation doesn't notice
there's more than one diagnostic per pattern.
First, CHECK-LABEL violates the assumption because CHECK-LABEL
tries to match twice, and other directives can match in between:
$ cat check CHECK: foobar CHECK-LABEL: foobar $ FileCheck -vv check < input |& tail -8 <<<<<< 1: text 2: foobar label:2'0 ^~~~~~ check:1 ^~~~~~ label:2'1 X error: no match found 3: text >>>>>>
Second, --implicit-check-not is obviously processed many times among
other directives:
$ cat check CHECK: foo CHECK: foo $ FileCheck -vv -dump-input=always -implicit-check-not=foo \ check < input |& tail -16 <<<<<< 1: text not:imp1'0 X~~~~ 2: foo check:1 ^~~ not:imp1'1 X 3: text not:imp1'1 ~~~~~ 4: foo check:2 ^~~ not:imp1'2 X 5: text not:imp1'2 ~~~~~ 6: eof:2 ^ >>>>>>
Are you aware of the split-file utility? It allows you to write these sorts of inputs without needing mass echo lines, all in the same test file.