[PATCH] D78024: [FileCheck] - Fix the false positive when -implicit-check-not is used with an unknown -check-prefix.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 14 03:41:11 PDT 2020
grimar updated this revision to Diff 257263.
grimar added a comment.
- Removed the fix for LLD test from this patch (I've committed it separatelly, rG09331fd742ef72836fc651b71dce90dfae63c2d8 <https://reviews.llvm.org/rG09331fd742ef72836fc651b71dce90dfae63c2d8>)
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D78024/new/
https://reviews.llvm.org/D78024
Files:
llvm/include/llvm/Support/FileCheck.h
llvm/lib/Support/FileCheck.cpp
llvm/test/FileCheck/implicit-check-not.txt
llvm/test/tools/llvm-objcopy/MachO/strip-debug.test
Index: llvm/test/tools/llvm-objcopy/MachO/strip-debug.test
===================================================================
--- llvm/test/tools/llvm-objcopy/MachO/strip-debug.test
+++ llvm/test/tools/llvm-objcopy/MachO/strip-debug.test
@@ -3,7 +3,7 @@
# RUN: yaml2obj %p/Inputs/strip-all-with-dwarf.yaml -o %t
# RUN: llvm-objcopy --strip-debug %t %t.stripped
-# RUN: llvm-readobj --sections %t.stripped | FileCheck /dev/null --check-prefix=NODWARF \
+# RUN: llvm-readobj --sections %t.stripped | FileCheck /dev/null \
# RUN: --implicit-check-not='Name: __debug' --implicit-check-not='Name: __apple'
## Make sure that all symbols are kept.
Index: llvm/test/FileCheck/implicit-check-not.txt
===================================================================
--- llvm/test/FileCheck/implicit-check-not.txt
+++ llvm/test/FileCheck/implicit-check-not.txt
@@ -1,4 +1,17 @@
; RUN: sed 's#^;.*##' %s | FileCheck -check-prefix=CHECK-PASS -implicit-check-not=warning: %s
+
+; Check we report an error when an unknown prefix is used together with `-implicit-check-not`.
+; RUN: sed 's#^;.*##' %s | %ProtectFileCheckOutput not FileCheck -check-prefix=UNKNOWN-PREFIX -implicit-check-not=abc %s 2>&1 | FileCheck %s -DPREFIX=UNKNOWN-PREFIX -check-prefix CHECK-PREFIX-ERROR
+; CHECK-PREFIX-ERROR: error: no check strings found with prefix '[[PREFIX]]:'
+
+; Check we report an error when the default "CHECK" prefix is used together with `-implicit-check-not`, but not present in the input.
+; RUN: sed 's#^;.*##' %s | %ProtectFileCheckOutput not FileCheck -check-prefix=CHECK -implicit-check-not=abc %s 2>&1 | FileCheck %s -DPREFIX=CHECK -check-prefix CHECK-PREFIX-ERROR
+
+; Check we allow using `-implicit-check-not` when there is no `-check-prefix` specified and there
+; is no default `CHECK` line in an input. Use an arbitrary random unique string as an
+; argument for `-implicit-check-not`.
+; RUN: sed 's#^;.*##' %s | FileCheck -implicit-check-not="c9e72085-aade-469a-9ad7-c206e1cfe7a9" %s
+
; RUN: sed 's#^;.*##' %s | %ProtectFileCheckOutput not FileCheck -check-prefix=CHECK-FAIL1 -implicit-check-not=warning: %s 2>&1 | FileCheck %s -check-prefix CHECK-ERROR1
; RUN: sed 's#^;.*##' %s | %ProtectFileCheckOutput not FileCheck -check-prefix=CHECK-FAIL2 -implicit-check-not=warning: %s 2>&1 | FileCheck %s -check-prefix CHECK-ERROR2
; RUN: sed 's#^;.*##' %s | %ProtectFileCheckOutput not FileCheck -check-prefix=CHECK-FAIL3 -implicit-check-not=warning: %s 2>&1 | FileCheck %s -check-prefix CHECK-ERROR3
Index: llvm/lib/Support/FileCheck.cpp
===================================================================
--- llvm/lib/Support/FileCheck.cpp
+++ llvm/lib/Support/FileCheck.cpp
@@ -1274,6 +1274,7 @@
// found.
unsigned LineNumber = 1;
+ bool FoundUsedPrefix = false;
while (1) {
Check::FileCheckType CheckTy;
@@ -1284,6 +1285,8 @@
FindFirstMatchingPrefix(PrefixRE, Buffer, LineNumber, CheckTy);
if (UsedPrefix.empty())
break;
+ FoundUsedPrefix = true;
+
assert(UsedPrefix.data() == Buffer.data() &&
"Failed to move Buffer's start forward, or pointed prefix outside "
"of the buffer!");
@@ -1367,9 +1370,11 @@
DagNotMatches = ImplicitNegativeChecks;
}
- // Add an EOF pattern for any trailing CHECK-DAG/-NOTs, and use the first
- // prefix as a filler for the error message.
- if (!DagNotMatches.empty()) {
+ // Add an EOF pattern for any trailing -implicit-check-not/CHECK-DAG/-NOTs,
+ // and use the first prefix as a filler for the error message.
+ // We do not allow using -implicit-check-not when an explicitly specified
+ // check prefix is not present in the input buffer.
+ if ((Req.IsDefaultCheckPrefix || FoundUsedPrefix) && !DagNotMatches.empty()) {
CheckStrings->emplace_back(
Pattern(Check::CheckEOF, PatternContext.get(), LineNumber + 1),
*Req.CheckPrefixes.begin(), SMLoc::getFromPointer(Buffer.data()));
@@ -1857,8 +1862,10 @@
Regex FileCheck::buildCheckPrefixRegex() {
// I don't think there's a way to specify an initial value for cl::list,
// so if nothing was specified, add the default
- if (Req.CheckPrefixes.empty())
+ if (Req.CheckPrefixes.empty()) {
Req.CheckPrefixes.push_back("CHECK");
+ Req.IsDefaultCheckPrefix = true;
+ }
// We already validated the contents of CheckPrefixes so just concatenate
// them as alternatives.
Index: llvm/include/llvm/Support/FileCheck.h
===================================================================
--- llvm/include/llvm/Support/FileCheck.h
+++ llvm/include/llvm/Support/FileCheck.h
@@ -31,6 +31,7 @@
bool AllowEmptyInput = false;
bool MatchFullLines = false;
bool IgnoreCase = false;
+ bool IsDefaultCheckPrefix = false;
bool EnableVarScope = false;
bool AllowDeprecatedDagOverlap = false;
bool Verbose = false;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D78024.257263.patch
Type: text/x-patch
Size: 4845 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200414/574f4406/attachment.bin>
More information about the llvm-commits
mailing list