diff options
author | Ilya Biryukov <ibiryukov@google.com> | 2019-08-27 10:02:18 +0000 |
---|---|---|
committer | Ilya Biryukov <ibiryukov@google.com> | 2019-08-27 10:02:18 +0000 |
commit | aef9ce4a19f9fcb73f5af966544cd461f0007240 (patch) | |
tree | cbe118125f08cf6cf19e218c83cd90533ecd9544 /lib/Frontend/CreateInvocationFromCommandLine.cpp | |
parent | 82826b06c65faa794af55367e9d51a46e8284c11 (diff) | |
download | clang-aef9ce4a19f9fcb73f5af966544cd461f0007240.tar.gz |
[Driver] Add an option for createInvocationFromCommandLine to recover on errors
Summary:
Previously, it would always return nullptr on any error.
This change adds a parameter, controlling whether the function should
attempt to return a non-null result even if unknown arguments (or other
errors were encountered).
The new behavior is only used in clangd.
Considered an alternative of changing the return value instead of adding
a new parameter, but that would require updating all callsites. Settled
with the parameter to minimize the code changes.
Reviewers: gribozavr
Reviewed By: gribozavr
Subscribers: nridge, jkorous, arphaman, kadircet, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D66731
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@370033 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/CreateInvocationFromCommandLine.cpp')
-rw-r--r-- | lib/Frontend/CreateInvocationFromCommandLine.cpp | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/lib/Frontend/CreateInvocationFromCommandLine.cpp b/lib/Frontend/CreateInvocationFromCommandLine.cpp index d70a3b9a42..ea7de7a411 100644 --- a/lib/Frontend/CreateInvocationFromCommandLine.cpp +++ b/lib/Frontend/CreateInvocationFromCommandLine.cpp @@ -24,14 +24,9 @@ using namespace clang; using namespace llvm::opt; -/// createInvocationFromCommandLine - Construct a compiler invocation object for -/// a command line argument vector. -/// -/// \return A CompilerInvocation, or 0 if none was built for the given -/// argument vector. std::unique_ptr<CompilerInvocation> clang::createInvocationFromCommandLine( ArrayRef<const char *> ArgList, IntrusiveRefCntPtr<DiagnosticsEngine> Diags, - IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS) { + IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS, bool ShouldRecoverOnErorrs) { if (!Diags.get()) { // No diagnostics engine was provided, so create our own diagnostics object // with the default options. @@ -95,11 +90,10 @@ std::unique_ptr<CompilerInvocation> clang::createInvocationFromCommandLine( const ArgStringList &CCArgs = Cmd.getArguments(); auto CI = std::make_unique<CompilerInvocation>(); - if (!CompilerInvocation::CreateFromArgs(*CI, - const_cast<const char **>(CCArgs.data()), - const_cast<const char **>(CCArgs.data()) + - CCArgs.size(), - *Diags)) + if (!CompilerInvocation::CreateFromArgs( + *CI, const_cast<const char **>(CCArgs.data()), + const_cast<const char **>(CCArgs.data()) + CCArgs.size(), *Diags) && + !ShouldRecoverOnErorrs) return nullptr; return CI; } |