mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[FileCheck] - Fix the false positive when -implicit-check-not is used with an unknown -check-prefix.
Imagine we have the following invocation: `FileCheck -check-prefix=UNKNOWN-PREFIX -implicit-check-not=something` When the check prefix does not exist it does not fail. This patch fixes the issue. Differential revision: https://reviews.llvm.org/D78024
This commit is contained in:
parent
ce8df193da
commit
ced5ee12e6
@ -31,6 +31,7 @@ struct FileCheckRequest {
|
||||
bool AllowEmptyInput = false;
|
||||
bool MatchFullLines = false;
|
||||
bool IgnoreCase = false;
|
||||
bool IsDefaultCheckPrefix = false;
|
||||
bool EnableVarScope = false;
|
||||
bool AllowDeprecatedDagOverlap = false;
|
||||
bool Verbose = false;
|
||||
|
@ -1305,6 +1305,7 @@ bool FileCheck::readCheckFile(SourceMgr &SM, StringRef Buffer,
|
||||
// found.
|
||||
unsigned LineNumber = 1;
|
||||
|
||||
bool FoundUsedPrefix = false;
|
||||
while (1) {
|
||||
Check::FileCheckType CheckTy;
|
||||
|
||||
@ -1315,6 +1316,8 @@ bool FileCheck::readCheckFile(SourceMgr &SM, StringRef Buffer,
|
||||
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!");
|
||||
@ -1398,16 +1401,10 @@ bool FileCheck::readCheckFile(SourceMgr &SM, StringRef Buffer,
|
||||
DagNotMatches = ImplicitNegativeChecks;
|
||||
}
|
||||
|
||||
// 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.
|
||||
if (!DagNotMatches.empty()) {
|
||||
CheckStrings->emplace_back(
|
||||
Pattern(Check::CheckEOF, PatternContext.get(), LineNumber + 1),
|
||||
*Req.CheckPrefixes.begin(), SMLoc::getFromPointer(Buffer.data()));
|
||||
std::swap(DagNotMatches, CheckStrings->back().DagNotStrings);
|
||||
}
|
||||
|
||||
if (CheckStrings->empty()) {
|
||||
// When there are no used prefixes we report an error except in the case that
|
||||
// no prefix is specified explicitly but -implicit-check-not is specified.
|
||||
if (!FoundUsedPrefix &&
|
||||
(ImplicitNegativeChecks.empty() || !Req.IsDefaultCheckPrefix)) {
|
||||
errs() << "error: no check strings found with prefix"
|
||||
<< (Req.CheckPrefixes.size() > 1 ? "es " : " ");
|
||||
auto I = Req.CheckPrefixes.begin();
|
||||
@ -1423,6 +1420,15 @@ bool FileCheck::readCheckFile(SourceMgr &SM, StringRef Buffer,
|
||||
return true;
|
||||
}
|
||||
|
||||
// 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.
|
||||
if (!DagNotMatches.empty()) {
|
||||
CheckStrings->emplace_back(
|
||||
Pattern(Check::CheckEOF, PatternContext.get(), LineNumber + 1),
|
||||
*Req.CheckPrefixes.begin(), SMLoc::getFromPointer(Buffer.data()));
|
||||
std::swap(DagNotMatches, CheckStrings->back().DagNotStrings);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1888,8 +1894,10 @@ bool FileCheck::ValidateCheckPrefixes() {
|
||||
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.
|
||||
|
@ -1,4 +1,16 @@
|
||||
; 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 "CHECK" prefix is used explicitly 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.
|
||||
; RUN: sed 's#^;.*##' %s | FileCheck -implicit-check-not="unique_string" %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
|
||||
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user