diff options
| -rw-r--r-- | llvm/test/FileCheck/check-multiple-prefixes-substr.txt | 5 | ||||
| -rw-r--r-- | llvm/utils/FileCheck/FileCheck.cpp | 21 | 
2 files changed, 16 insertions, 10 deletions
diff --git a/llvm/test/FileCheck/check-multiple-prefixes-substr.txt b/llvm/test/FileCheck/check-multiple-prefixes-substr.txt new file mode 100644 index 00000000000..76a2ca8e75c --- /dev/null +++ b/llvm/test/FileCheck/check-multiple-prefixes-substr.txt @@ -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}} diff --git a/llvm/utils/FileCheck/FileCheck.cpp b/llvm/utils/FileCheck/FileCheck.cpp index d5f760246d6..f2510d7dfd7 100644 --- a/llvm/utils/FileCheck/FileCheck.cpp +++ b/llvm/utils/FileCheck/FileCheck.cpp @@ -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;  }  | 

