[llvm] r194565 - FileCheck: fix a bug with multiple --check-prefix options.

Alexey Samsonov samsonov at google.com
Wed Nov 13 03:56:22 PST 2013


Author: samsonov
Date: Wed Nov 13 05:56:22 2013
New Revision: 194565

URL: http://llvm.org/viewvc/llvm-project?rev=194565&view=rev
Log:
FileCheck: fix a bug with multiple --check-prefix options.

Summary:
This fixes a subtle bug in new FileCheck feature added
in r194343. When we search for the first satisfying check-prefix,
we should actually return the first encounter of some check-prefix as a
substring, even if it's not a part of valid check-line. Otherwise
"FileCheck --check-prefix=FOO --check-prefix=BAR" with check file:

  FOO not a vaild check-line
  FOO: foo
  BAR: bar

incorrectly accepted file:

  fog
  bar

as it skipped the first two encounters of FOO, matching only BAR: line.

Reviewers: arsenm, dsanders

Reviewed By: dsanders

CC: llvm-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D2166

Added:
    llvm/trunk/test/FileCheck/check-multiple-prefixes-nomatch.txt
Modified:
    llvm/trunk/utils/FileCheck/FileCheck.cpp

Added: llvm/trunk/test/FileCheck/check-multiple-prefixes-nomatch.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FileCheck/check-multiple-prefixes-nomatch.txt?rev=194565&view=auto
==============================================================================
--- llvm/trunk/test/FileCheck/check-multiple-prefixes-nomatch.txt (added)
+++ llvm/trunk/test/FileCheck/check-multiple-prefixes-nomatch.txt Wed Nov 13 05:56:22 2013
@@ -0,0 +1,10 @@
+; RUN: not FileCheck -input-file %s %s -check-prefix=FOO -check-prefix=BAR 2>&1 | FileCheck %s
+
+BAR
+bar
+foo
+; BAR: ba{{z}}
+; FOO: fo{{o}}
+
+; CHECK: {{error: expected string not found in input}}
+; CHECK-NEXT: {{B}}AR: ba{{[{][{]z[}][}]}}

Modified: llvm/trunk/utils/FileCheck/FileCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/FileCheck/FileCheck.cpp?rev=194565&r1=194564&r2=194565&view=diff
==============================================================================
--- llvm/trunk/utils/FileCheck/FileCheck.cpp (original)
+++ llvm/trunk/utils/FileCheck/FileCheck.cpp Wed Nov 13 05:56:22 2013
@@ -794,12 +794,12 @@ static StringRef FindFirstCandidateMatch
       continue;
 
     Check::CheckType Ty = FindCheckType(Rest, Prefix);
-    if (Ty == Check::CheckNone)
-      continue;
 
     FirstLoc = PrefixLoc;
     FirstTy = Ty;
-    FirstPrefix = Prefix;
+    // We've found the first matching check prefix. If it is invalid, we should
+    // continue the search after it.
+    FirstPrefix = (Ty == Check::CheckNone) ? "" : Prefix;
   }
 
   if (FirstPrefix.empty()) {





More information about the llvm-commits mailing list