diff options
| author | Thomas Preud'homme <thomasp@graphcore.ai> | 2019-04-29 17:46:26 +0000 |
|---|---|---|
| committer | Thomas Preud'homme <thomasp@graphcore.ai> | 2019-04-29 17:46:26 +0000 |
| commit | 15cb1f1501047ac4fb4ae142a9b4570a3cb74741 (patch) | |
| tree | bf024eb17e68a17dd27b668ad008cca7fe7ed16e /llvm/unittests | |
| parent | 41232d266198dcf4741df3f0a471800750fc8281 (diff) | |
| download | bcm5719-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')
| -rw-r--r-- | llvm/unittests/Support/FileCheckTest.cpp | 56 |
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; |

