diff options
author | Joel E. Denny <jdenny.ornl@gmail.com> | 2018-12-18 00:03:36 +0000 |
---|---|---|
committer | Joel E. Denny <jdenny.ornl@gmail.com> | 2018-12-18 00:03:36 +0000 |
commit | 96f0e84ccf299f31c8dff0067d3582758ebcae43 (patch) | |
tree | 31b8b02c83fbbeb61d8f6f8d2b964d5a031c4139 /llvm/lib/Support | |
parent | f7c1c4d8a497daac9dbb874bf437c882b01c37c6 (diff) | |
download | bcm5719-llvm-96f0e84ccf299f31c8dff0067d3582758ebcae43.tar.gz bcm5719-llvm-96f0e84ccf299f31c8dff0067d3582758ebcae43.zip |
[FileCheck] Annotate input dump (7/7)
This patch implements annotations for diagnostics reporting CHECK-NOT
failed matches. These diagnostics are enabled by -vv. As for
diagnostics reporting failed matches for other directives, these
annotations mark the search ranges using `X~~`. The difference here
is that failed matches for CHECK-NOT are successes not errors, so they
are green not red when colors are enabled.
For example:
```
$ FileCheck -dump-input=help
The following description was requested by -dump-input=help to
explain the input annotations printed by -dump-input=always and
-dump-input=fail:
- L: labels line number L of the input file
- T:L labels the only match result for a pattern of type T from line L of
the check file
- T:L'N labels the Nth match result for a pattern of type T from line L of
the check file
- ^~~ marks good match (reported if -v)
- !~~ marks bad match, such as:
- CHECK-NEXT on same line as previous match (error)
- CHECK-NOT found (error)
- CHECK-DAG overlapping match (discarded, reported if -vv)
- X~~ marks search range when no match is found, such as:
- CHECK-NEXT not found (error)
- CHECK-NOT not found (success, reported if -vv)
- CHECK-DAG not found after discarded matches (error)
- ? marks fuzzy match when no match is found
- colors success, error, fuzzy match, discarded match, unmatched input
If you are not seeing color above or in input dumps, try: -color
$ FileCheck -vv -dump-input=always check5 < input5 |& sed -n '/^<<<</,$p'
<<<<<<
1: abcdef
check:1 ^~~
not:2 X~~
2: ghijkl
not:2 ~~~
check:3 ^~~
3: mnopqr
not:4 X~~~~~
4: stuvwx
not:4 ~~~~~~
5:
eof:4 ^
>>>>>>
$ cat check5
CHECK: abc
CHECK-NOT: foobar
CHECK: jkl
CHECK-NOT: foobar
$ cat input5
abcdef
ghijkl
mnopqr
stuvwx
```
Reviewed By: george.karpenkov, probinson
Differential Revision: https://reviews.llvm.org/D53899
llvm-svn: 349424
Diffstat (limited to 'llvm/lib/Support')
-rw-r--r-- | llvm/lib/Support/FileCheck.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/llvm/lib/Support/FileCheck.cpp b/llvm/lib/Support/FileCheck.cpp index 52da7e9865d..cf377bd92e2 100644 --- a/llvm/lib/Support/FileCheck.cpp +++ b/llvm/lib/Support/FileCheck.cpp @@ -421,9 +421,7 @@ static SMRange ProcessMatchResult(FileCheckDiag::MatchType MatchTy, SMLoc Start = SMLoc::getFromPointer(Buffer.data() + Pos); SMLoc End = SMLoc::getFromPointer(Buffer.data() + Pos + Len); SMRange Range(Start, End); - // TODO: The second condition will disappear when we extend this to handle - // more match types. - if (Diags && MatchTy != FileCheckDiag::MatchTypeCount) { + if (Diags) { if (AdjustPrevDiag) Diags->rbegin()->MatchTy = MatchTy; else @@ -962,12 +960,13 @@ static void PrintNoMatch(bool ExpectedMatch, const SourceMgr &SM, Buffer = Buffer.substr(Buffer.find_first_not_of(" \t\n\r")); SMRange SearchRange = ProcessMatchResult( ExpectedMatch ? FileCheckDiag::MatchNoneButExpected - : FileCheckDiag::MatchTypeCount, + : FileCheckDiag::MatchNoneAndExcluded, SM, Loc, Pat.getCheckTy(), Buffer, 0, Buffer.size(), Diags); SM.PrintMessage(SearchRange.Start, SourceMgr::DK_Note, "scanning from here"); // Allow the pattern to print additional information if desired. Pat.PrintVariableUses(SM, Buffer, VariableTable); + if (ExpectedMatch) Pat.PrintFuzzyMatch(SM, Buffer, VariableTable, Diags); } @@ -1176,7 +1175,7 @@ bool FileCheckString::CheckNot( if (Pos == StringRef::npos) { PrintNoMatch(false, SM, Prefix, Pat->getLoc(), *Pat, 1, Buffer, - VariableTable, Req.VerboseVerbose, nullptr); + VariableTable, Req.VerboseVerbose, Diags); continue; } |