Author: ibiryukov Date: Tue Aug 27 03:02:18 2019 New Revision: 370033 URL: http://llvm.org/viewvc/llvm-project?rev=370033&view=rev Log: [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 Modified: clang-tools-extra/trunk/clangd/Compiler.cpp clang-tools-extra/trunk/clangd/unittests/ClangdUnitTests.cpp Modified: clang-tools-extra/trunk/clangd/Compiler.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/Compiler.cpp?rev=370033&r1=370032&r2=370033&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/Compiler.cpp (original) +++ clang-tools-extra/trunk/clangd/Compiler.cpp Tue Aug 27 03:02:18 2019 @@ -59,7 +59,8 @@ buildCompilerInvocation(const ParseInput CompilerInstance::createDiagnostics(new DiagnosticOptions, &IgnoreDiagnostics, false); std::unique_ptr<CompilerInvocation> CI = createInvocationFromCommandLine( - ArgStrs, CommandLineDiagsEngine, Inputs.FS); + ArgStrs, CommandLineDiagsEngine, Inputs.FS, + /*ShouldRecoverOnErrors=*/true); if (!CI) return nullptr; // createInvocationFromCommandLine sets DisableFree. Modified: clang-tools-extra/trunk/clangd/unittests/ClangdUnitTests.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/ClangdUnitTests.cpp?rev=370033&r1=370032&r2=370033&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/unittests/ClangdUnitTests.cpp (original) +++ clang-tools-extra/trunk/clangd/unittests/ClangdUnitTests.cpp Tue Aug 27 03:02:18 2019 @@ -9,7 +9,9 @@ #include "AST.h" #include "Annotations.h" #include "ClangdUnit.h" +#include "Compiler.h" #include "SourceCode.h" +#include "TestFS.h" #include "TestTU.h" #include "clang/AST/DeclTemplate.h" #include "clang/Basic/TokenKinds.h" @@ -244,6 +246,20 @@ TEST(ClangdUnitTest, NoCrashOnTokensWith EXPECT_EQ(T.expandedTokens().drop_back().back().text(SM), "}"); } +TEST(ClangdUnitTest, CanBuildInvocationWithUnknownArgs) { + // Unknown flags should not prevent a build of compiler invocation. + ParseInputs Inputs; + Inputs.FS = buildTestFS({{testPath("foo.cpp"), "void test() {}"}}); + Inputs.CompileCommand.CommandLine = {"clang", "-fsome-unknown-flag", + testPath("foo.cpp")}; + EXPECT_NE(buildCompilerInvocation(Inputs), nullptr); + + // Unknown forwarded to -cc1 should not a failure either. + Inputs.CompileCommand.CommandLine = { + "clang", "-Xclang", "-fsome-unknown-flag", testPath("foo.cpp")}; + EXPECT_NE(buildCompilerInvocation(Inputs), nullptr); +} + } // namespace } // namespace clangd } // namespace clang _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits