Skip to content

Commit

Permalink
Revert "[FileCheck] Make invalid prefix diagnostics more precise"
Browse files Browse the repository at this point in the history
  • Loading branch information
jdenny-ornl committed May 11, 2020
1 parent d0e7fd6 commit e1ed4d9
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 30 deletions.
40 changes: 18 additions & 22 deletions llvm/lib/Support/FileCheck.cpp
Expand Up @@ -1874,37 +1874,33 @@ size_t FileCheckString::CheckDag(const SourceMgr &SM, StringRef Buffer,
return StartPos;
}

static bool ValidatePrefixes(StringSet<> &UniquePrefixes,
ArrayRef<StringRef> SuppliedPrefixes) {
for (StringRef Prefix : SuppliedPrefixes) {
if (Prefix.empty()) {
errs() << "error: supplied check prefix must not be the empty string\n";
// A check prefix must contain only alphanumeric, hyphens and underscores.
static bool ValidateCheckPrefix(StringRef CheckPrefix) {
static const Regex Validator("^[a-zA-Z0-9_-]*$");
return Validator.match(CheckPrefix);
}

bool FileCheck::ValidateCheckPrefixes() {
StringSet<> PrefixSet;

for (StringRef Prefix : Req.CheckPrefixes) {
// Reject empty prefixes.
if (Prefix.empty())
return false;
}
static const Regex Validator("^[a-zA-Z0-9_-]*$");
if (!Validator.match(Prefix)) {
errs() << "error: supplied check prefix must start with a letter and "
<< "contain only alphanumeric characters, hyphens, and "
<< "underscores: '" << Prefix << "'\n";

if (!PrefixSet.insert(Prefix).second)
return false;
}
if (!UniquePrefixes.insert(Prefix).second) {
errs() << "error: supplied check prefix must be unique among check "
<< "prefixes: '" << Prefix << "'\n";

if (!ValidateCheckPrefix(Prefix))
return false;
}
}
return true;
}

bool FileCheck::ValidateCheckPrefixes() {
StringSet<> UniquePrefixes;
if (!ValidatePrefixes(UniquePrefixes, Req.CheckPrefixes))
return false;
return true;
}

Regex FileCheck::buildCheckPrefixRegex() {
// I don't think there's a way to specify an initial value for cl::list,
// so if nothing was specified, add the default
if (Req.CheckPrefixes.empty()) {
Req.CheckPrefixes.push_back("CHECK");
Req.IsDefaultCheckPrefix = true;
Expand Down
11 changes: 4 additions & 7 deletions llvm/test/FileCheck/validate-check-prefix.txt
@@ -1,13 +1,10 @@
// RUN: %ProtectFileCheckOutput not FileCheck -check-prefix=A! -input-file %s %s 2>&1 | FileCheck -check-prefix=BAD_PREFIX %s
// RUN: FileCheck -check-prefix=A1a-B_c -input-file %s %s
// RUN: %ProtectFileCheckOutput not FileCheck -check-prefix=REPEAT -check-prefix=REPEAT -input-file %s %s 2>&1 | FileCheck -check-prefix=DUPLICATE_PREFIX %s
// RUN: %ProtectFileCheckOutput not FileCheck -check-prefix=REPEAT -check-prefix=REPEAT -input-file %s %s 2>&1 | FileCheck -check-prefix=BAD_PREFIX %s
// RUN: %ProtectFileCheckOutput not FileCheck -check-prefix=VALID -check-prefix=A! -input-file %s %s 2>&1 | FileCheck -check-prefix=BAD_PREFIX %s
// RUN: %ProtectFileCheckOutput not FileCheck -check-prefix= -input-file %s %s 2>&1 | FileCheck -check-prefix=EMPTY_PREFIX %s
// RUN: %ProtectFileCheckOutput not FileCheck -check-prefix= -input-file %s %s 2>&1 | FileCheck -check-prefix=BAD_PREFIX %s
foobar
; A1a-B_c: foobar

; BAD_PREFIX: supplied check prefix must start with a letter and contain only alphanumeric characters, hyphens, and underscores: 'A!'

; DUPLICATE_PREFIX: error: supplied check prefix must be unique among check prefixes: 'REPEAT'

; EMPTY_PREFIX: error: supplied check prefix must not be the empty string
; BAD_PREFIX: Supplied check-prefix is invalid! Prefixes must be
unique and start with a letter and contain only alphanumeric characters, hyphens and underscores
6 changes: 5 additions & 1 deletion llvm/utils/FileCheck/FileCheck.cpp
Expand Up @@ -601,8 +601,12 @@ int main(int argc, char **argv) {
Req.Verbose = true;

FileCheck FC(Req);
if (!FC.ValidateCheckPrefixes())
if (!FC.ValidateCheckPrefixes()) {
errs() << "Supplied check-prefix is invalid! Prefixes must be unique and "
"start with a letter and contain only alphanumeric characters, "
"hyphens and underscores\n";
return 2;
}

Regex PrefixRE = FC.buildCheckPrefixRegex();
std::string REError;
Expand Down

0 comments on commit e1ed4d9

Please sign in to comment.