forked from OSchip/llvm-project
[FileCheck] Fix @LINE value after match failure
Summary: The value of the FileCheckNumericVariable class instance representing the @LINE numeric variable is set and cleared respectively before and after substitutions are made, if any. However, when a substitution fails, the value is not cleared. This causes the next substitution of @LINE later on to give the wrong value since setValue is a nop if the value is already set. This is what caused failures after commit r365249. Reviewers: jhenderson, chandlerc, jdenny, probinson, grimar, arichardson, rnk Subscribers: hiraditya, llvm-commits, probinson, dblaikie, grimar, arichardson, tra, rnk, kristina, hfinkel, rogfer01, JonChesterfield Tags: #llvm Differential Revision: https://reviews.llvm.org/D64449 llvm-svn: 365624
This commit is contained in:
parent
775b2f598a
commit
f6ea43b8b3
|
@ -580,8 +580,10 @@ Expected<size_t> FileCheckPattern::match(StringRef Buffer, size_t &MatchLen,
|
|||
for (const auto &Substitution : Substitutions) {
|
||||
// Substitute and check for failure (e.g. use of undefined variable).
|
||||
Expected<std::string> Value = Substitution->getResult();
|
||||
if (!Value)
|
||||
if (!Value) {
|
||||
Context->LineVariable->clearValue();
|
||||
return Value.takeError();
|
||||
}
|
||||
|
||||
// Plop it into the regex at the adjusted offset.
|
||||
TmpStr.insert(TmpStr.begin() + Substitution->getIndex() + InsertOffset,
|
||||
|
|
|
@ -334,6 +334,21 @@ TEST_F(FileCheckTest, Match) {
|
|||
EXPECT_TRUE(Tester.matchExpect("19 21"));
|
||||
EXPECT_TRUE(Tester.matchExpect("18 21"));
|
||||
EXPECT_FALSE(Tester.matchExpect("18 20"));
|
||||
|
||||
// Check matching a numeric expression using @LINE after match failure uses
|
||||
// the correct value for @LINE.
|
||||
Tester.initNextPattern();
|
||||
EXPECT_FALSE(Tester.parsePatternExpect("[[#@LINE]]"));
|
||||
// Ok, @LINE is 4 now.
|
||||
EXPECT_FALSE(Tester.matchExpect("4"));
|
||||
Tester.initNextPattern();
|
||||
// @LINE is now 5, match with substitution failure.
|
||||
EXPECT_FALSE(Tester.parsePatternExpect("[[#UNKNOWN]]"));
|
||||
EXPECT_TRUE(Tester.matchExpect("FOO"));
|
||||
Tester.initNextPattern();
|
||||
// Check that @LINE is 6 as expected.
|
||||
EXPECT_FALSE(Tester.parsePatternExpect("[[#@LINE]]"));
|
||||
EXPECT_FALSE(Tester.matchExpect("6"));
|
||||
}
|
||||
|
||||
TEST_F(FileCheckTest, Substitution) {
|
||||
|
|
Loading…
Reference in New Issue