hokein created this revision. hokein added a reviewer: sammccall. Herald added subscribers: usaxena95, kadircet, arphaman. Herald added a project: clang. hokein requested review of this revision. Herald added subscribers: MaskRay, ilya-biryukov.
so that we could start experiment for C. Previously, these flags in clangd were only meaningful for C++. We need to flip them for C, this patch repurpose these flags. - if true, just set it. - if false, just respect the value in clang. this would allow us to keep flags on for C++, and optionally flip them on for C. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D89233 Files: clang-tools-extra/clangd/ClangdServer.h clang-tools-extra/clangd/Compiler.cpp clang-tools-extra/clangd/tool/ClangdMain.cpp clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp clang-tools-extra/clangd/unittests/FindTargetTests.cpp clang-tools-extra/clangd/unittests/TestTU.cpp
Index: clang-tools-extra/clangd/unittests/TestTU.cpp =================================================================== --- clang-tools-extra/clangd/unittests/TestTU.cpp +++ clang-tools-extra/clangd/unittests/TestTU.cpp @@ -59,8 +59,6 @@ FS.OverlayRealFileSystemForModules = true; Inputs.TFS = &FS; Inputs.Opts = ParseOptions(); - Inputs.Opts.BuildRecoveryAST = true; - Inputs.Opts.PreserveRecoveryASTType = true; Inputs.Opts.ClangTidyOpts.Checks = ClangTidyChecks; Inputs.Opts.ClangTidyOpts.WarningsAsErrors = ClangTidyWarningsAsErrors; Inputs.Index = ExternalIndex; Index: clang-tools-extra/clangd/unittests/FindTargetTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/FindTargetTests.cpp +++ clang-tools-extra/clangd/unittests/FindTargetTests.cpp @@ -148,6 +148,17 @@ EXPECT_DECLS("LabelStmt", "label:"); } +TEST_F(TargetDeclTest, RecoveryForC) { + Flags = {"-xc", "-Xclang", "-frecovery-ast"}; + Code = R"cpp( + // error-ok: testing behavior on broken code + // int f(); + int f(int); + int x = [[f]](); + )cpp"; + EXPECT_DECLS("DeclRefExpr", "int f(int)"); +} + TEST_F(TargetDeclTest, Recovery) { Code = R"cpp( // error-ok: testing behavior on broken code Index: clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp +++ clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp @@ -111,8 +111,6 @@ MockFS FS; auto Inputs = TU.inputs(FS); - Inputs.Opts.BuildRecoveryAST = true; - Inputs.Opts.PreserveRecoveryASTType = true; IgnoreDiagnostics Diags; auto CI = buildCompilerInvocation(Inputs, Diags); if (!CI) { @@ -1100,8 +1098,6 @@ MockFS FS; auto Inputs = TU.inputs(FS); Inputs.Index = Index.get(); - Inputs.Opts.BuildRecoveryAST = true; - Inputs.Opts.PreserveRecoveryASTType = true; IgnoreDiagnostics Diags; auto CI = buildCompilerInvocation(Inputs, Diags); if (!CI) { Index: clang-tools-extra/clangd/tool/ClangdMain.cpp =================================================================== --- clang-tools-extra/clangd/tool/ClangdMain.cpp +++ clang-tools-extra/clangd/tool/ClangdMain.cpp @@ -310,7 +310,7 @@ opt<bool> RecoveryAST{ "recovery-ast", cat(Features), - desc("Preserve expressions in AST for broken code (C++ only)."), + desc("Preserve expressions in AST for broken code."), init(ClangdServer::Options().BuildRecoveryAST), }; Index: clang-tools-extra/clangd/Compiler.cpp =================================================================== --- clang-tools-extra/clangd/Compiler.cpp +++ clang-tools-extra/clangd/Compiler.cpp @@ -81,11 +81,11 @@ // Don't crash on `#pragma clang __debug parser_crash` CI->getPreprocessorOpts().DisablePragmaDebugCrash = true; - // Recovery expression currently only works for C++. - if (CI->getLangOpts()->CPlusPlus) { - CI->getLangOpts()->RecoveryAST = Inputs.Opts.BuildRecoveryAST; - CI->getLangOpts()->RecoveryASTType = Inputs.Opts.PreserveRecoveryASTType; - } + if (Inputs.Opts.BuildRecoveryAST) + CI->getLangOpts()->RecoveryAST = true; + if (Inputs.Opts.PreserveRecoveryASTType) + CI->getLangOpts()->RecoveryASTType = true; + return CI; } Index: clang-tools-extra/clangd/ClangdServer.h =================================================================== --- clang-tools-extra/clangd/ClangdServer.h +++ clang-tools-extra/clangd/ClangdServer.h @@ -127,11 +127,13 @@ /// enabled. ClangTidyOptionsBuilder GetClangTidyOptions; - /// If true, turn on the `-frecovery-ast` clang flag. - bool BuildRecoveryAST = true; + /// If true, turn on the `-frecovery-ast` clang flag; + /// If false, respect to the value in clang. + bool BuildRecoveryAST = false; /// If true, turn on the `-frecovery-ast-type` clang flag. - bool PreserveRecoveryASTType = true; + /// If false, respect to the value in clang. + bool PreserveRecoveryASTType = false; /// Clangd's workspace root. Relevant for "workspace" operations not bound /// to a particular file.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits