summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel E. Denny <jdenny.ornl@gmail.com>2018-12-18 00:03:36 +0000
committerJoel E. Denny <jdenny.ornl@gmail.com>2018-12-18 00:03:36 +0000
commit96f0e84ccf299f31c8dff0067d3582758ebcae43 (patch)
tree31b8b02c83fbbeb61d8f6f8d2b964d5a031c4139
parentf7c1c4d8a497daac9dbb874bf437c882b01c37c6 (diff)
downloadbcm5719-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
-rw-r--r--llvm/include/llvm/Support/FileCheck.h7
-rw-r--r--llvm/lib/Support/FileCheck.cpp9
-rw-r--r--llvm/test/FileCheck/dump-input-annotations.txt8
-rw-r--r--llvm/utils/FileCheck/FileCheck.cpp5
4 files changed, 18 insertions, 11 deletions
diff --git a/llvm/include/llvm/Support/FileCheck.h b/llvm/include/llvm/Support/FileCheck.h
index c79e9cb683e..edc5424bd21 100644
--- a/llvm/include/llvm/Support/FileCheck.h
+++ b/llvm/include/llvm/Support/FileCheck.h
@@ -173,14 +173,15 @@ struct FileCheckDiag {
MatchFinalButWrongLine,
/// Indicates a discarded match for an expected pattern.
MatchDiscard,
+ /// Indicates no match for an excluded pattern.
+ MatchNoneAndExcluded,
/// Indicates no match for an expected pattern.
MatchNoneButExpected,
/// Indicates a possible intended match because there's no perfect match.
MatchFuzzy,
- MatchTypeCount,
} MatchTy;
- /// The match range if MatchTy is not MatchNoneButExpected, or the search
- /// range otherwise.
+ /// The match range if MatchTy is not MatchNoneAndExcluded or
+ /// MatchNoneButExpected, or the search range otherwise.
unsigned InputStartLine, InputStartCol, InputEndLine, InputEndCol;
FileCheckDiag(const SourceMgr &SM, const Check::FileCheckType &CheckTy,
SMLoc CheckLoc, MatchType MatchTy, SMRange InputRange);
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;
}
diff --git a/llvm/test/FileCheck/dump-input-annotations.txt b/llvm/test/FileCheck/dump-input-annotations.txt
index 20598809851..3dc7f908aa2 100644
--- a/llvm/test/FileCheck/dump-input-annotations.txt
+++ b/llvm/test/FileCheck/dump-input-annotations.txt
@@ -252,7 +252,7 @@
; EMP2-NOT: {{.}}
;--------------------------------------------------
-; CHECK-NOT (also: EOF pattern)
+; CHECK-NOT (also: EOF pattern, and multiline range that ends before EOL)
;--------------------------------------------------
; No match (success) and unexpected match (error).
@@ -273,9 +273,12 @@
; 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: >>>>>>
@@ -294,9 +297,12 @@
; 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-VV-NEXT: not:1 ~~
; NOT2-V-NEXT: check:3 ^~~
; NOT2-NEXT: >>>>>>
; NOT2-NOT: {{.}}
diff --git a/llvm/utils/FileCheck/FileCheck.cpp b/llvm/utils/FileCheck/FileCheck.cpp
index cde9bb95706..6f4cf31ec83 100644
--- a/llvm/utils/FileCheck/FileCheck.cpp
+++ b/llvm/utils/FileCheck/FileCheck.cpp
@@ -153,12 +153,12 @@ static MarkerStyle GetMarker(FileCheckDiag::MatchType MatchTy) {
case FileCheckDiag::MatchDiscard:
return MarkerStyle('!', raw_ostream::CYAN,
"discard: overlaps earlier match");
+ case FileCheckDiag::MatchNoneAndExcluded:
+ return MarkerStyle('X', raw_ostream::GREEN);
case FileCheckDiag::MatchNoneButExpected:
return MarkerStyle('X', raw_ostream::RED, "error: no match found");
case FileCheckDiag::MatchFuzzy:
return MarkerStyle('?', raw_ostream::MAGENTA, "possible intended match");
- case FileCheckDiag::MatchTypeCount:
- llvm_unreachable_internal("unexpected match type");
}
llvm_unreachable_internal("unexpected match type");
}
@@ -200,6 +200,7 @@ static void DumpInputAnnotationHelp(raw_ostream &OS) {
WithColor(OS, raw_ostream::SAVEDCOLOR, true) << "X~~";
OS << " marks search range when no match is found, such as:\n"
<< " - CHECK-NEXT not found (error)\n"
+ << " - CHECK-NOT not found (success, reported if -vv)\n"
<< " - CHECK-DAG not found after discarded matches (error)\n"
<< " - ";
WithColor(OS, raw_ostream::SAVEDCOLOR, true) << "?";
OpenPOWER on IntegriCloud