diff options
Diffstat (limited to 'llvm/lib/Support/FileCheck.cpp')
-rw-r--r-- | llvm/lib/Support/FileCheck.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/llvm/lib/Support/FileCheck.cpp b/llvm/lib/Support/FileCheck.cpp index 9fb4d798849..e0f17787bdf 100644 --- a/llvm/lib/Support/FileCheck.cpp +++ b/llvm/lib/Support/FileCheck.cpp @@ -124,8 +124,8 @@ char FileCheckNotFoundError::ID = 0; Expected<FileCheckNumericVariable *> FileCheckPattern::parseNumericVariableDefinition( - StringRef &Expr, FileCheckPatternContext *Context, size_t LineNumber, - const SourceMgr &SM) { + StringRef &Expr, FileCheckPatternContext *Context, + Optional<size_t> LineNumber, const SourceMgr &SM) { Expected<VariableProperties> ParseVarResult = parseVariable(Expr, SM); if (!ParseVarResult) return ParseVarResult.takeError(); @@ -152,7 +152,7 @@ FileCheckPattern::parseNumericVariableDefinition( if (VarTableIter != Context->GlobalNumericVariableTable.end()) DefinedNumericVariable = VarTableIter->second; else - DefinedNumericVariable = Context->makeNumericVariable(LineNumber, Name); + DefinedNumericVariable = Context->makeNumericVariable(Name, LineNumber); return DefinedNumericVariable; } @@ -177,11 +177,12 @@ FileCheckPattern::parseNumericVariableUse(StringRef Name, bool IsPseudo, if (VarTableIter != Context->GlobalNumericVariableTable.end()) NumericVariable = VarTableIter->second; else { - NumericVariable = Context->makeNumericVariable(0, Name); + NumericVariable = Context->makeNumericVariable(Name); Context->GlobalNumericVariableTable[Name] = NumericVariable; } - if (!IsPseudo && NumericVariable->getDefLineNumber() == LineNumber) + Optional<size_t> DefLineNumber = NumericVariable->getDefLineNumber(); + if (DefLineNumber && LineNumber && *DefLineNumber == *LineNumber) return FileCheckErrorDiagnostic::get( SM, Name, "numeric variable '" + Name + "' defined on the same line as used"); @@ -620,7 +621,8 @@ Expected<size_t> FileCheckPattern::match(StringRef Buffer, size_t &MatchLen, std::string TmpStr; if (!Substitutions.empty()) { TmpStr = RegExStr; - Context->LineVariable->setValue(LineNumber); + if (LineNumber) + Context->LineVariable->setValue(*LineNumber); size_t InsertOffset = 0; // Substitute all string variables and expressions whose values are only @@ -1102,7 +1104,7 @@ FindFirstMatchingPrefix(Regex &PrefixRE, StringRef &Buffer, void FileCheckPatternContext::createLineVariable() { assert(!LineVariable && "@LINE pseudo numeric variable already created"); StringRef LineName = "@LINE"; - LineVariable = makeNumericVariable(0, LineName); + LineVariable = makeNumericVariable(LineName); GlobalNumericVariableTable[LineName] = LineVariable; } @@ -1131,7 +1133,7 @@ bool FileCheck::ReadCheckFile(SourceMgr &SM, StringRef Buffer, Regex &PrefixRE, SM.AddNewSourceBuffer(std::move(CmdLine), SMLoc()); ImplicitNegativeChecks.push_back( - FileCheckPattern(Check::CheckNot, &PatternContext, 0)); + FileCheckPattern(Check::CheckNot, &PatternContext)); ImplicitNegativeChecks.back().parsePattern(PatternInBuffer, "IMPLICIT-CHECK", SM, Req); } @@ -1790,8 +1792,8 @@ Error FileCheckPatternContext::defineCmdlineVariables( if (CmdlineDef[0] == '#') { StringRef CmdlineName = CmdlineDef.substr(1, EqIdx - 1); Expected<FileCheckNumericVariable *> ParseResult = - FileCheckPattern::parseNumericVariableDefinition(CmdlineName, this, 0, - SM); + FileCheckPattern::parseNumericVariableDefinition(CmdlineName, this, + None, SM); if (!ParseResult) { Errs = joinErrors(std::move(Errs), ParseResult.takeError()); continue; |