mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
Detect incorrect FileCheck variable CLI definition
Summary: While the backend code of FileCheck relies on definition of variable from the command-line to have an equal sign '=' and a variable name before that, the frontend does not actually enforce it. This leads to FileCheck crashing when invoked with invalid syntax for the -D option. This patch adds the missing validation in the frontend. It also makes the -D option an AlwaysPrefix option to be able to detect -D=FOO as being a define without variable and -D as missing its value. Copyright: - Linaro (changes in version 2 of revision D55940) - GraphCore (changes in later versions) Reviewers: jdenny Subscribers: JonChesterfield, hiraditya, kristina, probinson, llvm-commits Differential Revision: https://reviews.llvm.org/D55940 llvm-svn: 351039
This commit is contained in:
parent
30f7276059
commit
716e6fb7bd
@ -3,16 +3,32 @@
|
||||
;
|
||||
; RUN: not FileCheck -DVALUE=10 -check-prefix NOT -input-file %s %s 2>&1 | FileCheck %s -check-prefix NOT-ERRMSG
|
||||
; RUN: FileCheck -DVALUE=20 -check-prefix NOT -input-file %s %s
|
||||
; RUN: not FileCheck -DVALUE10 -input-file %s %s 2>&1 | FileCheck %s -check-prefix ERRCLIEQ1
|
||||
; RUN: not FileCheck -D -input-file %s %s 2>&1 | FileCheck %s -check-prefix ERRCLIEQ2
|
||||
; RUN: not FileCheck -D=10 -input-file %s %s 2>&1 | FileCheck %s -check-prefix ERRCLIVAR1
|
||||
; RUN: not FileCheck -D= -input-file %s %s 2>&1 | FileCheck %s -check-prefix ERRCLIVAR2
|
||||
; RUN: FileCheck -DVALUE= -check-prefix EMPTY -input-file %s %s 2>&1
|
||||
|
||||
Value = 10
|
||||
; CHECK: Value = [[VALUE]]
|
||||
; NOT-NOT: Value = [[VALUE]]
|
||||
|
||||
; ERRMSG: defines.txt:8:10: error: CHECK: expected string not found in input
|
||||
; ERRMSG: defines.txt:[[@LINE-3]]:10: error: CHECK: expected string not found in input
|
||||
; ERRMSG: defines.txt:1:1: note: scanning from here
|
||||
; ERRMSG: defines.txt:1:1: note: with variable "VALUE" equal to "20"
|
||||
; ERRMSG: defines.txt:7:1: note: possible intended match here
|
||||
; ERRMSG: defines.txt:[[@LINE-7]]:1: note: possible intended match here
|
||||
|
||||
; NOT-ERRMSG: defines.txt:9:12: error: {{NOT}}-NOT: excluded string found in input
|
||||
; NOT-ERRMSG: defines.txt:7:1: note: found here
|
||||
; NOT-ERRMSG: defines.txt:7:1: note: with variable "VALUE" equal to "10"
|
||||
; NOT-ERRMSG: defines.txt:[[@LINE-7]]:12: error: {{NOT}}-NOT: excluded string found in input
|
||||
; NOT-ERRMSG: defines.txt:[[@LINE-10]]:1: note: found here
|
||||
; NOT-ERRMSG: defines.txt:[[@LINE-11]]:1: note: with variable "VALUE" equal to "10"
|
||||
|
||||
; ERRCLIEQ1: Missing equal sign in command-line definition '-DVALUE10'
|
||||
|
||||
; ERRCLIEQ2: FileCheck: for the -D option: requires a value!
|
||||
|
||||
; ERRCLIVAR1: Missing pattern variable name in command-line definition '-D=10'
|
||||
|
||||
; ERRCLIVAR2: Missing pattern variable name in command-line definition '-D='
|
||||
|
||||
Empty value = @@
|
||||
; EMPTY: Empty value = @[[VALUE]]@
|
||||
|
@ -51,9 +51,10 @@ static cl::list<std::string> ImplicitCheckNot(
|
||||
"this pattern occur which are not matched by a positive pattern"),
|
||||
cl::value_desc("pattern"));
|
||||
|
||||
static cl::list<std::string> GlobalDefines("D", cl::Prefix,
|
||||
cl::desc("Define a variable to be used in capture patterns."),
|
||||
cl::value_desc("VAR=VALUE"));
|
||||
static cl::list<std::string>
|
||||
GlobalDefines("D", cl::AlwaysPrefix,
|
||||
cl::desc("Define a variable to be used in capture patterns."),
|
||||
cl::value_desc("VAR=VALUE"));
|
||||
|
||||
static cl::opt<bool> AllowEmptyInput(
|
||||
"allow-empty", cl::init(false),
|
||||
@ -523,8 +524,25 @@ int main(int argc, char **argv) {
|
||||
for (auto CheckNot : ImplicitCheckNot)
|
||||
Req.ImplicitCheckNot.push_back(CheckNot);
|
||||
|
||||
for (auto G : GlobalDefines)
|
||||
bool GlobalDefineError = false;
|
||||
for (auto G : GlobalDefines) {
|
||||
size_t EqIdx = G.find('=');
|
||||
if (EqIdx == std::string::npos) {
|
||||
errs() << "Missing equal sign in command-line definition '-D" << G
|
||||
<< "'\n";
|
||||
GlobalDefineError = true;
|
||||
continue;
|
||||
}
|
||||
if (EqIdx == 0) {
|
||||
errs() << "Missing pattern variable name in command-line definition '-D"
|
||||
<< G << "'\n";
|
||||
GlobalDefineError = true;
|
||||
continue;
|
||||
}
|
||||
Req.GlobalDefines.push_back(G);
|
||||
}
|
||||
if (GlobalDefineError)
|
||||
return 2;
|
||||
|
||||
Req.AllowEmptyInput = AllowEmptyInput;
|
||||
Req.EnableVarScope = EnableVarScope;
|
||||
|
Loading…
Reference in New Issue
Block a user