From 94638f0081b6ec8c7cc5ad9fec8ddbdd6824d90d Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 25 Sep 2009 17:29:36 +0000 Subject: [PATCH] reject attempts to use ()'s in patterns, these are reserved for filecheck. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82780 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/FileCheck/FileCheck.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/utils/FileCheck/FileCheck.cpp b/utils/FileCheck/FileCheck.cpp index 1e6af371d8e..8e63a9961a0 100644 --- a/utils/FileCheck/FileCheck.cpp +++ b/utils/FileCheck/FileCheck.cpp @@ -45,6 +45,9 @@ NoCanonicalizeWhiteSpace("strict-whitespace", //===----------------------------------------------------------------------===// class Pattern { + SourceMgr *SM; + SMLoc PatternLoc; + /// FixedStr - If non-empty, this pattern is a fixed string match with the /// specified fixed string. StringRef FixedStr; @@ -67,6 +70,9 @@ private: }; bool Pattern::ParsePattern(StringRef PatternStr, SourceMgr &SM) { + this->SM = &SM; + PatternLoc = SMLoc::getFromPointer(PatternStr.data()); + // Ignore trailing whitespace. while (!PatternStr.empty() && (PatternStr.back() == ' ' || PatternStr.back() == '\t')) @@ -74,9 +80,8 @@ bool Pattern::ParsePattern(StringRef PatternStr, SourceMgr &SM) { // Check that there is something on the line. if (PatternStr.empty()) { - SM.PrintMessage(SMLoc::getFromPointer(PatternStr.data()), - "found empty check string with prefix '"+CheckPrefix+":'", - "error"); + SM.PrintMessage(PatternLoc, "found empty check string with prefix '" + + CheckPrefix+":'", "error"); return true; } @@ -170,6 +175,13 @@ size_t Pattern::Match(StringRef Buffer, size_t &MatchLen) const { assert(!MatchInfo.empty() && "Didn't get any match"); StringRef FullMatch = MatchInfo[0]; + + if (MatchInfo.size() != 1) { + SM->PrintMessage(PatternLoc, "regex cannot use grouping parens", "error"); + exit(1); + } + + MatchLen = FullMatch.size(); return FullMatch.data()-Buffer.data(); }