diff --git a/llvm/lib/FileCheck/FileCheck.cpp b/llvm/lib/FileCheck/FileCheck.cpp --- a/llvm/lib/FileCheck/FileCheck.cpp +++ b/llvm/lib/FileCheck/FileCheck.cpp @@ -22,6 +22,7 @@ #include "llvm/Support/FormatVariadic.h" #include #include +#include #include #include @@ -1825,8 +1826,9 @@ // found. unsigned LineNumber = 1; - bool FoundUsedCheckPrefix = false; - while (1) { + std::set PrefixesNotFound(Req.CheckPrefixes.begin(), + Req.CheckPrefixes.end()); + while (true) { Check::FileCheckType CheckTy; // See if a prefix occurs in the memory buffer. @@ -1837,7 +1839,7 @@ if (UsedPrefix.empty()) break; if (CheckTy != Check::CheckComment) - FoundUsedCheckPrefix = true; + PrefixesNotFound.erase(UsedPrefix); assert(UsedPrefix.data() == Buffer.data() && "Failed to move Buffer's start forward, or pointed prefix outside " @@ -1930,14 +1932,16 @@ // When there are no used prefixes we report an error except in the case that // no prefix is specified explicitly but -implicit-check-not is specified. - if (!FoundUsedCheckPrefix && + if (!PrefixesNotFound.empty() && (ImplicitNegativeChecks.empty() || !Req.IsDefaultCheckPrefix)) { errs() << "error: no check strings found with prefix" << (Req.CheckPrefixes.size() > 1 ? "es " : " "); - for (size_t I = 0, E = Req.CheckPrefixes.size(); I != E; ++I) { - if (I != 0) + bool First = true; + for (StringRef MissingPrefix : PrefixesNotFound) { + if (!First) errs() << ", "; - errs() << "\'" << Req.CheckPrefixes[I] << ":'"; + errs() << "\'" << MissingPrefix << ":'"; + First = false; } errs() << '\n'; return true;