summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/Support
diff options
context:
space:
mode:
authorThomas Preud'homme <thomasp@graphcore.ai>2019-05-02 00:04:38 +0000
committerThomas Preud'homme <thomasp@graphcore.ai>2019-05-02 00:04:38 +0000
commit288ed91e99d80413f8d1bcab12d75dc9360715f3 (patch)
treedb65c351241b2794f70196305cefbef3fd756438 /llvm/unittests/Support
parent2efd30571bcc53003376410d4221f7e4dd19f4c3 (diff)
downloadbcm5719-llvm-288ed91e99d80413f8d1bcab12d75dc9360715f3.tar.gz
bcm5719-llvm-288ed91e99d80413f8d1bcab12d75dc9360715f3.zip
FileCheck [4/12]: Introduce @LINE numeric expressions
Summary: This patch is part of a patch series to add support for FileCheck numeric expressions. This specific patch introduces the @LINE numeric expressions. This commit introduces a new syntax to express a relation a numeric value in the input text must have with the line number of a given CHECK pattern: [[#<@LINE numeric expression>]]. Further commits build on that to express relations between several numeric values in the input text. To help with naming, regular variables are renamed into pattern variables and old @LINE expression syntax is referred to as legacy numeric expression. Compared to existing @LINE expressions, this new syntax allow arbitrary spacing between the component of the expression. It offers otherwise the same functionality but the commit serves to introduce some of the data structure needed to support more general numeric expressions. Copyright: - Linaro (changes up to diff 183612 of revision D55940) - GraphCore (changes in later versions of revision D55940 and in new revision created off D55940) 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/D60384 llvm-svn: 359741
Diffstat (limited to 'llvm/unittests/Support')
-rw-r--r--llvm/unittests/Support/FileCheckTest.cpp62
1 files changed, 54 insertions, 8 deletions
diff --git a/llvm/unittests/Support/FileCheckTest.cpp b/llvm/unittests/Support/FileCheckTest.cpp
index 682f3246715..2e9caa2935f 100644
--- a/llvm/unittests/Support/FileCheckTest.cpp
+++ b/llvm/unittests/Support/FileCheckTest.cpp
@@ -105,7 +105,7 @@ public:
SM.AddNewSourceBuffer(std::move(Buffer), SMLoc());
StringRef VarNameRef = NameTrailerRef.substr(0, VarName.size());
StringRef TrailerRef = NameTrailerRef.substr(VarName.size());
- return P.parseExpression(VarNameRef, TrailerRef, SM);
+ return P.parseNumericExpression(VarNameRef, TrailerRef, SM) == nullptr;
}
};
@@ -146,6 +146,52 @@ TEST_F(FileCheckTest, ParseExpr) {
EXPECT_TRUE(Tester.parseExpect(VarName, Trailer));
}
+TEST_F(FileCheckTest, Substitution) {
+ SourceMgr SM;
+ FileCheckPatternContext Context;
+ std::vector<std::string> GlobalDefines;
+ GlobalDefines.emplace_back(std::string("FOO=BAR"));
+ Context.defineCmdlineVariables(GlobalDefines, SM);
+
+ FileCheckPatternSubstitution Substitution =
+ FileCheckPatternSubstitution(&Context, "VAR404", 42);
+ EXPECT_FALSE(Substitution.getResult());
+
+ FileCheckNumExpr NumExpr = FileCheckNumExpr(42);
+ Substitution = FileCheckPatternSubstitution(&Context, "@LINE", &NumExpr, 12);
+ llvm::Optional<std::string> Value = Substitution.getResult();
+ EXPECT_TRUE(Value);
+ EXPECT_EQ("42", *Value);
+
+ FileCheckPattern P = FileCheckPattern(Check::CheckPlain, &Context);
+ Substitution = FileCheckPatternSubstitution(&Context, "FOO", 42);
+ Value = Substitution.getResult();
+ EXPECT_TRUE(Value);
+ EXPECT_EQ("BAR", *Value);
+}
+
+TEST_F(FileCheckTest, UndefVars) {
+ SourceMgr SM;
+ FileCheckPatternContext Context;
+ std::vector<std::string> GlobalDefines;
+ GlobalDefines.emplace_back(std::string("FOO=BAR"));
+ Context.defineCmdlineVariables(GlobalDefines, SM);
+
+ FileCheckPatternSubstitution Substitution =
+ FileCheckPatternSubstitution(&Context, "VAR404", 42);
+ StringRef UndefVar = Substitution.getUndefVarName();
+ EXPECT_EQ("VAR404", UndefVar);
+
+ FileCheckNumExpr NumExpr = FileCheckNumExpr(42);
+ Substitution = FileCheckPatternSubstitution(&Context, "@LINE", &NumExpr, 12);
+ UndefVar = Substitution.getUndefVarName();
+ EXPECT_EQ("", UndefVar);
+
+ Substitution = FileCheckPatternSubstitution(&Context, "FOO", 42);
+ UndefVar = Substitution.getUndefVarName();
+ EXPECT_EQ("", UndefVar);
+}
+
TEST_F(FileCheckTest, FileCheckContext) {
FileCheckPatternContext Cxt = FileCheckPatternContext();
std::vector<std::string> GlobalDefines;
@@ -176,9 +222,9 @@ TEST_F(FileCheckTest, FileCheckContext) {
StringRef LocalVarStr = "LocalVar";
StringRef EmptyVarStr = "EmptyVar";
StringRef UnknownVarStr = "UnknownVar";
- llvm::Optional<StringRef> LocalVar = Cxt.getVarValue(LocalVarStr);
- llvm::Optional<StringRef> EmptyVar = Cxt.getVarValue(EmptyVarStr);
- llvm::Optional<StringRef> UnknownVar = Cxt.getVarValue(UnknownVarStr);
+ llvm::Optional<StringRef> LocalVar = Cxt.getPatternVarValue(LocalVarStr);
+ llvm::Optional<StringRef> EmptyVar = Cxt.getPatternVarValue(EmptyVarStr);
+ llvm::Optional<StringRef> UnknownVar = Cxt.getPatternVarValue(UnknownVarStr);
EXPECT_TRUE(LocalVar);
EXPECT_EQ(*LocalVar, "FOO");
EXPECT_TRUE(EmptyVar);
@@ -187,9 +233,9 @@ TEST_F(FileCheckTest, FileCheckContext) {
// Clear local variables and check they become absent.
Cxt.clearLocalVars();
- LocalVar = Cxt.getVarValue(LocalVarStr);
+ LocalVar = Cxt.getPatternVarValue(LocalVarStr);
EXPECT_FALSE(LocalVar);
- EmptyVar = Cxt.getVarValue(EmptyVarStr);
+ EmptyVar = Cxt.getPatternVarValue(EmptyVarStr);
EXPECT_FALSE(EmptyVar);
// Redefine global variables and check variables are defined again.
@@ -197,13 +243,13 @@ TEST_F(FileCheckTest, FileCheckContext) {
GotError = Cxt.defineCmdlineVariables(GlobalDefines, SM);
EXPECT_FALSE(GotError);
StringRef GlobalVarStr = "$GlobalVar";
- llvm::Optional<StringRef> GlobalVar = Cxt.getVarValue(GlobalVarStr);
+ llvm::Optional<StringRef> GlobalVar = Cxt.getPatternVarValue(GlobalVarStr);
EXPECT_TRUE(GlobalVar);
EXPECT_EQ(*GlobalVar, "BAR");
// Clear local variables and check global variables remain defined.
Cxt.clearLocalVars();
- GlobalVar = Cxt.getVarValue(GlobalVarStr);
+ GlobalVar = Cxt.getPatternVarValue(GlobalVarStr);
EXPECT_TRUE(GlobalVar);
}
} // namespace
OpenPOWER on IntegriCloud