[FileCheck] Extend -dump-input with substitutions
authorJoel E. Denny <jdenny.ornl@gmail.com>
Tue, 28 Jul 2020 22:09:05 +0000 (18:09 -0400)
committerJoel E. Denny <jdenny.ornl@gmail.com>
Tue, 28 Jul 2020 23:15:18 +0000 (19:15 -0400)
commitd680711b94e94e9387076a0daf2a329e304e6751
tree5935efba27b72116c3a4e694ca27e54c79a26255
parent2cb926a447d22166dac0d6e6dceaf5b3616ef6a1
[FileCheck] Extend -dump-input with substitutions

Substitutions are already reported in the diagnostics appearing before
the input dump in the case of failed directives, and they're reported
in traces (produced by `-vv -dump-input=never`) in the case of
successful directives.  However, those reports are not always
convenient to view while investigating the input dump, so this patch
adds the substitution report to the input dump too.  For example:

```
$ cat check
CHECK: hello [[WHAT:[a-z]+]]
CHECK: [[VERB]] [[WHAT]]

$ FileCheck -vv -DVERB=goodbye check < input |& tail -8
<<<<<<
           1: hello world
check:1       ^~~~~~~~~~~
           2: goodbye word
check:2'0     X~~~~~~~~~~~ error: no match found
check:2'1                  with "VERB" equal to "goodbye"
check:2'2                  with "WHAT" equal to "world"
>>>>>>
```

Without this patch, the location reported for a substitution for a
directive match is the directive's full match range.  This location is
misleading as it implies the substitution itself matches that range.
This patch changes the reported location to just the match range start
to suggest the substitution is known at the start of the match.  (As
in the above example, input dumps don't mark any range for
substitutions.  The location info in that case simply identifies the
right line for the annotation.)

Reviewed By: mehdi_amini, thopre

Differential Revision: https://reviews.llvm.org/D83650
llvm/include/llvm/Support/FileCheck.h
llvm/lib/Support/FileCheck.cpp
llvm/lib/Support/FileCheckImpl.h
llvm/test/FileCheck/dump-input-annotations.txt
llvm/test/FileCheck/verbose.txt
llvm/utils/FileCheck/FileCheck.cpp