mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
FileCheck: fix matching of one check-prefix is a prefix of another
Summary: Fix a case when "FileCheck --check-prefix=CHECK --check-prefix=CHECKER" would silently ignore check-lines of the form: CHECKER: foo Reviewers: dsanders Reviewed By: dsanders CC: llvm-commits Differential Revision: http://llvm-reviews.chandlerc.com/D2168 llvm-svn: 194577
This commit is contained in:
parent
3c0d3eb4a9
commit
927745059f
5
test/FileCheck/check-multiple-prefixes-substr.txt
Normal file
5
test/FileCheck/check-multiple-prefixes-substr.txt
Normal file
@ -0,0 +1,5 @@
|
||||
// RUN: FileCheck -check-prefix=CHECKER -check-prefix=CHECK -input-file %s %s
|
||||
// RUN: FileCheck -check-prefix=CHECK -check-prefix=CHECKER -input-file %s %s
|
||||
|
||||
foo
|
||||
; CHECKER: fo{{o}}
|
@ -785,6 +785,10 @@ static StringRef FindFirstCandidateMatch(StringRef &Buffer,
|
||||
// We only want to find the first match to avoid skipping some.
|
||||
if (PrefixLoc > FirstLoc)
|
||||
continue;
|
||||
// If one matching check-prefix is a prefix of another, choose the
|
||||
// longer one.
|
||||
if (PrefixLoc == FirstLoc && Prefix.size() < FirstPrefix.size())
|
||||
continue;
|
||||
|
||||
StringRef Rest = Buffer.drop_front(PrefixLoc);
|
||||
// Make sure we have actually found the prefix, and not a word containing
|
||||
@ -793,22 +797,19 @@ static StringRef FindFirstCandidateMatch(StringRef &Buffer,
|
||||
if (PrefixLoc != 0 && IsPartOfWord(Buffer[PrefixLoc - 1]))
|
||||
continue;
|
||||
|
||||
Check::CheckType Ty = FindCheckType(Rest, Prefix);
|
||||
|
||||
FirstLoc = PrefixLoc;
|
||||
FirstTy = Ty;
|
||||
// We've found the first matching check prefix. If it is invalid, we should
|
||||
// continue the search after it.
|
||||
FirstPrefix = (Ty == Check::CheckNone) ? "" : Prefix;
|
||||
FirstTy = FindCheckType(Rest, Prefix);
|
||||
FirstPrefix = Prefix;
|
||||
}
|
||||
|
||||
if (FirstPrefix.empty()) {
|
||||
// If the first prefix is invalid, we should continue the search after it.
|
||||
if (FirstTy == Check::CheckNone) {
|
||||
CheckLoc = SearchLoc;
|
||||
} else {
|
||||
CheckTy = FirstTy;
|
||||
CheckLoc = FirstLoc;
|
||||
return "";
|
||||
}
|
||||
|
||||
CheckTy = FirstTy;
|
||||
CheckLoc = FirstLoc;
|
||||
return FirstPrefix;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user