[PATCH] D64449: [FileCheck] Fix @LINE value after match failure
Thomas Preud'homme via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 9 14:41:11 PDT 2019
thopre created this revision.
thopre added reviewers: jhenderson, chandlerc, jdenny, probinson, grimar, arichardson, rnk.
thopre added a project: LLVM.
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.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D64449
Files:
llvm/lib/Support/FileCheck.cpp
llvm/unittests/Support/FileCheckTest.cpp
Index: llvm/unittests/Support/FileCheckTest.cpp
===================================================================
--- llvm/unittests/Support/FileCheckTest.cpp
+++ llvm/unittests/Support/FileCheckTest.cpp
@@ -334,6 +334,21 @@
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) {
Index: llvm/lib/Support/FileCheck.cpp
===================================================================
--- llvm/lib/Support/FileCheck.cpp
+++ llvm/lib/Support/FileCheck.cpp
@@ -580,8 +580,10 @@
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,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64449.208816.patch
Type: text/x-patch
Size: 1695 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190709/5a91e5bf/attachment.bin>
More information about the llvm-commits
mailing list