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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194565 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Alexey Samsonov 2013-11-13 11:56:22 +00:00
parent 8b99622b9b
commit 7df6641654
2 changed files with 13 additions and 3 deletions

View File

@ -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[}][}]}}

View File

@ -794,12 +794,12 @@ static StringRef FindFirstCandidateMatch(StringRef &Buffer,
continue; continue;
Check::CheckType Ty = FindCheckType(Rest, Prefix); Check::CheckType Ty = FindCheckType(Rest, Prefix);
if (Ty == Check::CheckNone)
continue;
FirstLoc = PrefixLoc; FirstLoc = PrefixLoc;
FirstTy = Ty; 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()) { if (FirstPrefix.empty()) {