diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-07-05 02:50:03 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-07-05 02:50:03 +0000 |
commit | a5db79d5148d3972b90390f526fd35d707729c5a (patch) | |
tree | 4c9c94d67373505814981c3c0b5ba2b5aa21fa73 /utils/not | |
parent | b1b738e03613e98f0ae367af1b5423221c5bd29d (diff) | |
download | external_llvm-a5db79d5148d3972b90390f526fd35d707729c5a.zip external_llvm-a5db79d5148d3972b90390f526fd35d707729c5a.tar.gz external_llvm-a5db79d5148d3972b90390f526fd35d707729c5a.tar.bz2 |
Add a --crash option to not.
Now the two possible uses of not are
* not cmd
Will return true if cmd doesn't crash and returns false.
* not --crash cmd
Will return true if cmd crashes.
It will be used/tested in a followup commit for the clang crash recovery
testing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185678 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/not')
-rw-r--r-- | utils/not/not.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/utils/not/not.cpp b/utils/not/not.cpp index 13803dc..ebd1618 100644 --- a/utils/not/not.cpp +++ b/utils/not/not.cpp @@ -13,14 +13,33 @@ using namespace llvm; int main(int argc, const char **argv) { - std::string Program = sys::FindProgramByName(argv[1]); + bool ExpectCrash = false; + + ++argv; + --argc; + + if (argc > 0 && StringRef(argv[0]) == "--crash") { + ++argv; + --argc; + ExpectCrash = true; + } + + if (argc == 0) + return 1; + + std::string Program = sys::FindProgramByName(argv[0]); std::string ErrMsg; - int Result = sys::ExecuteAndWait(Program, argv + 1, 0, 0, 0, 0, &ErrMsg); + int Result = sys::ExecuteAndWait(Program, argv, 0, 0, 0, 0, &ErrMsg); if (Result < 0) { errs() << "Error: " << ErrMsg << "\n"; + if (ExpectCrash) + return 0; return 1; } + if (ExpectCrash) + return 1; + return Result == 0; } |