From cb358e7d95f156c0d0ea5bec8da4d0cd7856b885 Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Thu, 7 Aug 2014 18:40:37 +0000 Subject: [PATCH] FileCheck: Add a flag to allow checking empty input Currently FileCheck errors out on empty input. This is usually the right thing to do, but makes testing things like "this command does not emit some error message" hard to test. This usually leads to people using "command 2>&1 | count 0" instead, and then the bots that use guard malloc fail a few hours later. By adding a flag to FileCheck that allows empty inputs, we can make tests that consist entirely of "CHECK-NOT" lines feasible. llvm-svn: 215127 --- test/FileCheck/check-empty.txt | 11 +++++++++++ utils/FileCheck/FileCheck.cpp | 7 ++++++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test/FileCheck/check-empty.txt diff --git a/test/FileCheck/check-empty.txt b/test/FileCheck/check-empty.txt new file mode 100644 index 00000000000..9caea65ee61 --- /dev/null +++ b/test/FileCheck/check-empty.txt @@ -0,0 +1,11 @@ +// RUN: not FileCheck -check-prefix=FOO %s &1 | FileCheck -check-prefix=EMPTY-ERR %s +// RUN: not FileCheck -check-prefix=NOFOO %s &1 | FileCheck -check-prefix=EMPTY-ERR %s +// RUN: not FileCheck -check-prefix=FOO -allow-empty %s &1 | FileCheck -check-prefix=NO-EMPTY-ERR -check-prefix=NOT-FOUND %s +// RUN: FileCheck -check-prefix=NOFOO -allow-empty %s &1 | FileCheck -allow-empty -check-prefix=NO-EMPTY-ERR %s + +; FOO: foo +; NOFOO-NOT: foo + +; EMPTY-ERR: FileCheck error: '-' is empty. +; NO-EMPTY-ERR-NOT: FileCheck error: '-' is empty. +; NOT-FOUND: error: expected string not found in input diff --git a/utils/FileCheck/FileCheck.cpp b/utils/FileCheck/FileCheck.cpp index 8c62ae7f5d1..e8365fc248a 100644 --- a/utils/FileCheck/FileCheck.cpp +++ b/utils/FileCheck/FileCheck.cpp @@ -57,6 +57,11 @@ static cl::list ImplicitCheckNot( "this pattern occur which are not matched by a positive pattern"), cl::value_desc("pattern")); +static cl::opt AllowEmptyInput( + "allow-empty", cl::init(false), + cl::desc("Allow the input file to be empty. This is useful when making\n" + "checks that some error message does not occur, for example.")); + typedef cl::list::const_iterator prefix_iterator; //===----------------------------------------------------------------------===// @@ -1260,7 +1265,7 @@ int main(int argc, char **argv) { } std::unique_ptr &File = FileOrErr.get(); - if (File->getBufferSize() == 0) { + if (File->getBufferSize() == 0 && !AllowEmptyInput) { errs() << "FileCheck error: '" << InputFilename << "' is empty.\n"; return 2; }