From 0fc7137f2f8a99cb749024c51e3247f4b24e1ee0 Mon Sep 17 00:00:00 2001 From: Michael Liao Date: Thu, 25 Apr 2013 21:31:34 +0000 Subject: Remove SMLoc paired with CHECK-NOT patterns. Not functionality change. Pattern has source location by itself. After adding a trivial method to retrieve it, it's unnecessary to pair a source location for CHECK-NOT patterns. One thing revised after this is the diagnostic info is more accurate by pointing to the start of the CHECK-NOT pattern instead of the end of the CHECK-NOT pattern. E.g. diagnostic message previously looks like :1:1: error: CHECK-NOT: string occurred! test ^ test.txt:1:16: note: CHECK-NOT: pattern specified here CHECK-NOT: test ^ is changed to :1:1: error: CHECK-NOT: string occurred! test ^ test.txt:1:12: note: CHECK-NOT: pattern specified here CHECK-NOT: test ^ git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180578 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/FileCheck/check-not-diaginfo.txt | 7 +++++++ utils/FileCheck/FileCheck.cpp | 17 +++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) create mode 100644 test/FileCheck/check-not-diaginfo.txt diff --git a/test/FileCheck/check-not-diaginfo.txt b/test/FileCheck/check-not-diaginfo.txt new file mode 100644 index 0000000000..a4c3ca8840 --- /dev/null +++ b/test/FileCheck/check-not-diaginfo.txt @@ -0,0 +1,7 @@ +; RUN: FileCheck -input-file %s %s 2>&1 | FileCheck -check-prefix DIAG %s + +CHECK-NOT: test + +DIAG: CHECK-NOT: pattern specified here +DIAG-NEXT: CHECK-NOT: test +DIAG-NEXT: {{^ \^}} diff --git a/utils/FileCheck/FileCheck.cpp b/utils/FileCheck/FileCheck.cpp index a25df5c57a..cd7bb5a44f 100644 --- a/utils/FileCheck/FileCheck.cpp +++ b/utils/FileCheck/FileCheck.cpp @@ -85,6 +85,9 @@ public: Pattern(bool matchEOF = false) : MatchEOF(matchEOF) { } + /// getLoc - Return the location in source code. + SMLoc getLoc() const { return PatternLoc; } + /// ParsePattern - Parse the given string into the Pattern. SM provides the /// SourceMgr used for error reports, and LineNumber is the line number in /// the input file from which the pattern string was read. @@ -581,7 +584,7 @@ struct CheckString { /// NotStrings - These are all of the strings that are disallowed from /// occurring between this match string and the previous one (or start of /// file). - std::vector > NotStrings; + std::vector NotStrings; CheckString(const Pattern &P, SMLoc L, bool isCheckNext) : Pat(P), Loc(L), IsCheckNext(isCheckNext) {} @@ -649,7 +652,7 @@ static bool ReadCheckFile(SourceMgr &SM, // Find all instances of CheckPrefix followed by : in the file. StringRef Buffer = F->getBuffer(); - std::vector > NotMatches; + std::vector NotMatches; // LineNumber keeps track of the line on which CheckPrefix instances are // found. @@ -716,8 +719,7 @@ static bool ReadCheckFile(SourceMgr &SM, // Handle CHECK-NOT. if (IsCheckNot) { - NotMatches.push_back(std::make_pair(SMLoc::getFromPointer(Buffer.data()), - P)); + NotMatches.push_back(P); continue; } @@ -877,14 +879,13 @@ int main(int argc, char **argv) { for (unsigned ChunkNo = 0, e = CheckStr.NotStrings.size(); ChunkNo != e; ++ChunkNo) { size_t MatchLen = 0; - size_t Pos = CheckStr.NotStrings[ChunkNo].second.Match(SkippedRegion, - MatchLen, - VariableTable); + size_t Pos = CheckStr.NotStrings[ChunkNo].Match(SkippedRegion, MatchLen, + VariableTable); if (Pos == StringRef::npos) continue; SM.PrintMessage(SMLoc::getFromPointer(LastMatch+Pos), SourceMgr::DK_Error, CheckPrefix+"-NOT: string occurred!"); - SM.PrintMessage(CheckStr.NotStrings[ChunkNo].first, SourceMgr::DK_Note, + SM.PrintMessage(CheckStr.NotStrings[ChunkNo].getLoc(), SourceMgr::DK_Note, CheckPrefix+"-NOT: pattern specified here"); return 1; } -- cgit v1.2.3-18-g5258