Page MenuHomePhabricator

D64226.diff
No OneTemporary

File Metadata

Created
Sat, Sep 21, 4:22 PM

D64226.diff

Index: llvm/trunk/lib/Support/FileCheck.cpp
===================================================================
--- llvm/trunk/lib/Support/FileCheck.cpp
+++ llvm/trunk/lib/Support/FileCheck.cpp
@@ -130,6 +130,11 @@
return FileCheckErrorDiagnostic::get(
SM, Name, "string variable with name '" + Name + "' already exists");
+ Expr = Expr.ltrim(SpaceChars);
+ if (!Expr.empty())
+ return FileCheckErrorDiagnostic::get(
+ SM, Expr, "unexpected characters after numeric variable name");
+
return Error::success();
}
@@ -229,27 +234,21 @@
size_t DefEnd = Expr.find(':');
if (DefEnd != StringRef::npos) {
StringRef DefExpr = Expr.substr(0, DefEnd);
- StringRef UseExpr = Expr = Expr.substr(DefEnd + 1);
+ StringRef UseExpr = Expr.substr(DefEnd + 1);
- DefExpr = DefExpr.ltrim(SpaceChars);
- StringRef Name;
- Error ErrorDiagnostic =
- parseNumericVariableDefinition(DefExpr, Name, Context, SM);
- if (ErrorDiagnostic)
- return std::move(ErrorDiagnostic);
-
- DefinedNumericVariable =
- Context->makeNumericVariable(this->LineNumber, Name);
-
- DefExpr = DefExpr.ltrim(SpaceChars);
- if (!DefExpr.empty())
- return FileCheckErrorDiagnostic::get(
- SM, DefExpr, "invalid numeric variable definition");
UseExpr = UseExpr.ltrim(SpaceChars);
if (!UseExpr.empty())
return FileCheckErrorDiagnostic::get(
SM, UseExpr,
"unexpected string after variable definition: '" + UseExpr + "'");
+
+ DefExpr = DefExpr.ltrim(SpaceChars);
+ StringRef Name;
+ Error Err = parseNumericVariableDefinition(DefExpr, Name, Context, SM);
+ if (Err)
+ return std::move(Err);
+ DefinedNumericVariable = Context->makeNumericVariable(LineNumber, Name);
+
return Context->makeExpression(add, nullptr, 0);
}
@@ -1735,32 +1734,12 @@
if (CmdlineDef[0] == '#') {
StringRef CmdlineName = CmdlineDef.substr(1, EqIdx - 1);
StringRef VarName;
- SMLoc CmdlineNameLoc = SMLoc::getFromPointer(CmdlineName.data());
Error ErrorDiagnostic = FileCheckPattern::parseNumericVariableDefinition(
CmdlineName, VarName, this, SM);
if (ErrorDiagnostic) {
Errs = joinErrors(std::move(Errs), std::move(ErrorDiagnostic));
continue;
}
- // Check that CmdlineName is only composed of the parsed numeric
- // variable. This catches cases like "FOO+2" in a "FOO+2=10" definition.
- if (!CmdlineName.empty()) {
- Errs = joinErrors(std::move(Errs),
- FileCheckErrorDiagnostic::get(
- SM, CmdlineNameLoc, "invalid variable name"));
- continue;
- }
-
- // Detect collisions between string and numeric variables when the latter
- // is created later than the former.
- if (DefinedVariableTable.find(VarName) != DefinedVariableTable.end()) {
- Errs = joinErrors(
- std::move(Errs),
- FileCheckErrorDiagnostic::get(SM, VarName,
- "string variable with name '" +
- VarName + "' already exists"));
- continue;
- }
StringRef CmdlineVal = CmdlineDef.substr(EqIdx + 1);
uint64_t Val;
Index: llvm/trunk/test/FileCheck/numeric-defines-diagnostics.txt
===================================================================
--- llvm/trunk/test/FileCheck/numeric-defines-diagnostics.txt
+++ llvm/trunk/test/FileCheck/numeric-defines-diagnostics.txt
@@ -20,9 +20,9 @@
RUN: not FileCheck -D#VALUE+2=10 --input-file %s %s 2>&1 \
RUN: | FileCheck %s --strict-whitespace --check-prefix NUMERRCLITRAIL
-NUMERRCLITRAIL: Global defines:1:20: error: invalid variable name
+NUMERRCLITRAIL: Global defines:1:25: error: unexpected characters after numeric variable name
NUMERRCLITRAIL-NEXT: Global define #1: #VALUE+2=10
-NUMERRCLITRAIL-NEXT: {{^ \^$}}
+NUMERRCLITRAIL-NEXT: {{^ \^$}}
; Invalid value: numeric expression instead of literal.
RUN: not FileCheck -D#VALUE1=3 -D#VALUE2='VALUE1 + 2' --input-file %s %s 2>&1 \

Event Timeline