summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/Support
diff options
context:
space:
mode:
authorThomas Preud'homme <thomasp@graphcore.ai>2019-04-29 17:46:26 +0000
committerThomas Preud'homme <thomasp@graphcore.ai>2019-04-29 17:46:26 +0000
commit15cb1f1501047ac4fb4ae142a9b4570a3cb74741 (patch)
treebf024eb17e68a17dd27b668ad008cca7fe7ed16e /llvm/unittests/Support
parent41232d266198dcf4741df3f0a471800750fc8281 (diff)
downloadbcm5719-llvm-15cb1f1501047ac4fb4ae142a9b4570a3cb74741.tar.gz
bcm5719-llvm-15cb1f1501047ac4fb4ae142a9b4570a3cb74741.zip
FileCheck [3/12]: Stricter parsing of @LINE expressions
Summary: This patch is part of a patch series to add support for FileCheck numeric expressions. This specific patch gives earlier and better diagnostics for the @LINE expressions. Rather than detect parsing errors at matching time, this commit adds enhance parsing to detect issues with @LINE expressions at parse time and diagnose them more accurately. 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/D60383 llvm-svn: 359475
Diffstat (limited to 'llvm/unittests/Support')
-rw-r--r--llvm/unittests/Support/FileCheckTest.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/llvm/unittests/Support/FileCheckTest.cpp b/llvm/unittests/Support/FileCheckTest.cpp
index 497c8086431..e120cbe5f1f 100644
--- a/llvm/unittests/Support/FileCheckTest.cpp
+++ b/llvm/unittests/Support/FileCheckTest.cpp
@@ -90,6 +90,62 @@ TEST_F(FileCheckTest, ParseVar) {
EXPECT_EQ(TrailIdx, VarName.size() - 1);
}
+class ExprTester {
+private:
+ SourceMgr SM;
+ FileCheckPatternContext Context;
+ FileCheckPattern P = FileCheckPattern(Check::CheckPlain, &Context);
+
+public:
+ bool parseExpect(std::string &VarName, std::string &Trailer) {
+ StringRef NameTrailer = StringRef(VarName + Trailer);
+ std::unique_ptr<MemoryBuffer> Buffer =
+ MemoryBuffer::getMemBufferCopy(NameTrailer, "TestBuffer");
+ StringRef NameTrailerRef = Buffer->getBuffer();
+ 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);
+ }
+};
+
+TEST_F(FileCheckTest, ParseExpr) {
+ ExprTester Tester;
+
+ // @LINE with offset.
+ std::string VarName = "@LINE";
+ std::string Trailer = "+3";
+ EXPECT_FALSE(Tester.parseExpect(VarName, Trailer));
+
+ // @LINE only.
+ Trailer = "";
+ EXPECT_FALSE(Tester.parseExpect(VarName, Trailer));
+
+ // Wrong Pseudovar.
+ VarName = "@FOO";
+ EXPECT_TRUE(Tester.parseExpect(VarName, Trailer));
+
+ // Unsupported operator.
+ VarName = "@LINE";
+ Trailer = "/2";
+ EXPECT_TRUE(Tester.parseExpect(VarName, Trailer));
+
+ // Missing offset operand.
+ VarName = "@LINE";
+ Trailer = "+";
+ EXPECT_TRUE(Tester.parseExpect(VarName, Trailer));
+
+ // Cannot parse offset operand.
+ VarName = "@LINE";
+ Trailer = "+x";
+ EXPECT_TRUE(Tester.parseExpect(VarName, Trailer));
+
+ // Unexpected string at end of numeric expression.
+ VarName = "@LINE";
+ Trailer = "+5x";
+ EXPECT_TRUE(Tester.parseExpect(VarName, Trailer));
+}
+
TEST_F(FileCheckTest, FileCheckContext) {
FileCheckPatternContext Cxt = FileCheckPatternContext();
std::vector<std::string> GlobalDefines;
OpenPOWER on IntegriCloud