[llvm] r262092 - [FileCheck] Abort if -NOT is combined with another suffix.

Paul Robinson via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 26 15:34:03 PST 2016


Author: probinson
Date: Fri Feb 26 17:34:02 2016
New Revision: 262092

URL: http://llvm.org/viewvc/llvm-project?rev=262092&view=rev
Log:
[FileCheck] Abort if -NOT is combined with another suffix.
Combinations of suffixes that look useful actually are ignored;
complaining about them will avoid mistakes.

Differential Revision: http://reviews.llvm.org/D17587

Added:
    llvm/trunk/test/FileCheck/no-multi-suffixes.txt
Modified:
    llvm/trunk/utils/FileCheck/FileCheck.cpp

Added: llvm/trunk/test/FileCheck/no-multi-suffixes.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FileCheck/no-multi-suffixes.txt?rev=262092&view=auto
==============================================================================
--- llvm/trunk/test/FileCheck/no-multi-suffixes.txt (added)
+++ llvm/trunk/test/FileCheck/no-multi-suffixes.txt Fri Feb 26 17:34:02 2016
@@ -0,0 +1,28 @@
+; RUN: not FileCheck -check-prefix=DAGNOT -input-file %s %s 2>&1 | FileCheck -check-prefix=ERROR -check-prefix=DAGNOT-ERROR %s
+; RUN: not FileCheck -check-prefix=NOTDAG -input-file %s %s 2>&1 | FileCheck -check-prefix=ERROR -check-prefix=NOTDAG-ERROR %s
+; RUN: not FileCheck -check-prefix=NEXTNOT -input-file %s %s 2>&1 | FileCheck -check-prefix=ERROR -check-prefix=NEXTNOT-ERROR %s
+; RUN: not FileCheck -check-prefix=NOTNEXT -input-file %s %s 2>&1 | FileCheck -check-prefix=ERROR -check-prefix=NOTNEXT-ERROR %s
+; RUN: not FileCheck -check-prefix=SAMENOT -input-file %s %s 2>&1 | FileCheck -check-prefix=ERROR -check-prefix=SAMENOT-ERROR %s
+; RUN: not FileCheck -check-prefix=NOTSAME -input-file %s %s 2>&1 | FileCheck -check-prefix=ERROR -check-prefix=NOTSAME-ERROR %s
+
+foo
+; DAGNOT: foo
+; DAGNOT-DAG-NOT: bar
+; NOTDAG: foo
+; NOTDAG-NOT-DAG: bar
+; NEXTNOT: foo
+; NEXTNOT-NEXT-NOT: bar
+; NOTNEXT: foo
+; NOTNEXT-NOT-NEXT: bar
+; SAMENOT: foo
+; SAMENOT-SAME-NOT: bar
+; NOTSAME: foo
+; NOTSAME-NOT-SAME: bar
+
+; ERROR: error: unsupported -NOT combo on prefix
+; DAGNOT-ERROR-SAME:  'DAGNOT'
+; NOTDAG-ERROR-SAME:  'NOTDAG'
+; NEXTNOT-ERROR-SAME: 'NEXTNOT'
+; NOTNEXT-ERROR-SAME: 'NOTNEXT'
+; SAMENOT-ERROR-SAME: 'SAMENOT'
+; NOTSAME-ERROR-SAME: 'NOTSAME'

Modified: llvm/trunk/utils/FileCheck/FileCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/FileCheck/FileCheck.cpp?rev=262092&r1=262091&r2=262092&view=diff
==============================================================================
--- llvm/trunk/utils/FileCheck/FileCheck.cpp (original)
+++ llvm/trunk/utils/FileCheck/FileCheck.cpp Fri Feb 26 17:34:02 2016
@@ -86,7 +86,9 @@ namespace Check {
 
     /// MatchEOF - When set, this pattern only matches the end of file. This is
     /// used for trailing CHECK-NOTs.
-    CheckEOF
+    CheckEOF,
+    /// CheckBadNot - Found -NOT combined with another CHECK suffix.
+    CheckBadNot
   };
 }
 
@@ -693,6 +695,7 @@ static bool IsPartOfWord(char c) {
 static size_t CheckTypeSize(Check::CheckType Ty) {
   switch (Ty) {
   case Check::CheckNone:
+  case Check::CheckBadNot:
     return 0;
 
   case Check::CheckPlain:
@@ -746,6 +749,12 @@ static Check::CheckType FindCheckType(St
   if (Rest.startswith("LABEL:"))
     return Check::CheckLabel;
 
+  // You can't combine -NOT with another suffix.
+  if (Rest.startswith("DAG-NOT:") || Rest.startswith("NOT-DAG:") ||
+      Rest.startswith("NEXT-NOT:") || Rest.startswith("NOT-NEXT:") ||
+      Rest.startswith("SAME-NOT:") || Rest.startswith("NOT-SAME:"))
+    return Check::CheckBadNot;
+
   return Check::CheckNone;
 }
 
@@ -914,6 +923,14 @@ static bool ReadCheckFile(SourceMgr &SM,
     // PrefixLoc is to the start of the prefix. Skip to the end.
     Buffer = Buffer.drop_front(UsedPrefix.size() + CheckTypeSize(CheckTy));
 
+    // Complain about useful-looking but unsupported suffixes.
+    if (CheckTy == Check::CheckBadNot) {
+      SM.PrintMessage(SMLoc::getFromPointer(Buffer.data()),
+                      SourceMgr::DK_Error,
+                      "unsupported -NOT combo on prefix '" + UsedPrefix + "'");
+      return true;
+    }
+
     // Okay, we found the prefix, yay. Remember the rest of the line, but ignore
     // leading and trailing whitespace.
     Buffer = Buffer.substr(Buffer.find_first_not_of(" \t"));




More information about the llvm-commits mailing list