[PATCH] D78848: [clangd] Disable delayed template parsing in the main file
This revision was automatically updated to reflect the committed changes. Closed by commit rG6d7637dc460a: [clangd] Disable delayed template parsing in the main file (authored by sammccall). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D78848/new/ https://reviews.llvm.org/D78848 Files: clang-tools-extra/clangd/ParsedAST.cpp clang-tools-extra/clangd/unittests/ParsedASTTests.cpp Index: clang-tools-extra/clangd/unittests/ParsedASTTests.cpp === --- clang-tools-extra/clangd/unittests/ParsedASTTests.cpp +++ clang-tools-extra/clangd/unittests/ParsedASTTests.cpp @@ -175,6 +175,17 @@ AllOf(DeclNamed("foo"), WithTemplateArgs(""))})); } +TEST(ParsedASTTest, IgnoresDelayedTemplateParsing) { + auto TU = TestTU::withCode(R"cpp( +template void xxx() { + int yyy = 0; +} + )cpp"); + TU.ExtraArgs.push_back("-fdelayed-template-parsing"); + auto AST = TU.build(); + EXPECT_EQ(Decl::Var, findUnqualifiedDecl(AST, "yyy").getKind()); +} + TEST(ParsedASTTest, TokensAfterPreamble) { TestTU TU; TU.AdditionalFiles["foo.h"] = R"( Index: clang-tools-extra/clangd/ParsedAST.cpp === --- clang-tools-extra/clangd/ParsedAST.cpp +++ clang-tools-extra/clangd/ParsedAST.cpp @@ -256,6 +256,9 @@ // Recovery expression currently only works for C++. if (CI->getLangOpts()->CPlusPlus) CI->getLangOpts()->RecoveryAST = Opts.BuildRecoveryAST; + // This is on-by-default in windows to allow parsing SDK headers, but it + // breaks many features. Disable it for the main-file (not preamble). + CI->getLangOpts()->DelayedTemplateParsing = false; StoreDiags ASTDiags; std::string Content = std::string(Buffer->getBuffer()); Index: clang-tools-extra/clangd/unittests/ParsedASTTests.cpp === --- clang-tools-extra/clangd/unittests/ParsedASTTests.cpp +++ clang-tools-extra/clangd/unittests/ParsedASTTests.cpp @@ -175,6 +175,17 @@ AllOf(DeclNamed("foo"), WithTemplateArgs(""))})); } +TEST(ParsedASTTest, IgnoresDelayedTemplateParsing) { + auto TU = TestTU::withCode(R"cpp( +template void xxx() { + int yyy = 0; +} + )cpp"); + TU.ExtraArgs.push_back("-fdelayed-template-parsing"); + auto AST = TU.build(); + EXPECT_EQ(Decl::Var, findUnqualifiedDecl(AST, "yyy").getKind()); +} + TEST(ParsedASTTest, TokensAfterPreamble) { TestTU TU; TU.AdditionalFiles["foo.h"] = R"( Index: clang-tools-extra/clangd/ParsedAST.cpp === --- clang-tools-extra/clangd/ParsedAST.cpp +++ clang-tools-extra/clangd/ParsedAST.cpp @@ -256,6 +256,9 @@ // Recovery expression currently only works for C++. if (CI->getLangOpts()->CPlusPlus) CI->getLangOpts()->RecoveryAST = Opts.BuildRecoveryAST; + // This is on-by-default in windows to allow parsing SDK headers, but it + // breaks many features. Disable it for the main-file (not preamble). + CI->getLangOpts()->DelayedTemplateParsing = false; StoreDiags ASTDiags; std::string Content = std::string(Buffer->getBuffer()); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D78848: [clangd] Disable delayed template parsing in the main file
kadircet accepted this revision. kadircet added a comment. This revision is now accepted and ready to land. thanks, LGTM! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D78848/new/ https://reviews.llvm.org/D78848 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D78848: [clangd] Disable delayed template parsing in the main file
sammccall created this revision. sammccall added a reviewer: kadircet. Herald added subscribers: cfe-commits, usaxena95, arphaman, jkorous, MaskRay, ilya-biryukov. Herald added a project: clang. This is on by default in windows and breaks most features in template bodies. We'd already disabled it in code completion, now disable it for building ASTs. Potential regressions: - we may give spurious errors where files with templates relying on delayed parsing are directly opened - we may misparse such template bodies that are instantiated (and therefore *were* previously parsed) Still *probably* a win overall. Avoiding the regressions entirely would be substantial work and we don't have plans for it now. Fixes https://github.com/clangd/clangd/issues/302 (again) Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D78848 Files: clang-tools-extra/clangd/ParsedAST.cpp clang-tools-extra/clangd/unittests/ParsedASTTests.cpp Index: clang-tools-extra/clangd/unittests/ParsedASTTests.cpp === --- clang-tools-extra/clangd/unittests/ParsedASTTests.cpp +++ clang-tools-extra/clangd/unittests/ParsedASTTests.cpp @@ -175,6 +175,17 @@ AllOf(DeclNamed("foo"), WithTemplateArgs(""))})); } +TEST(ParsedASTTest, IgnoresDelayedTemplateParsing) { + auto TU = TestTU::withCode(R"cpp( +template void xxx() { + int yyy = 0; +} + )cpp"); + TU.ExtraArgs.push_back("-fdelayed-template-parsing"); + auto AST = TU.build(); + EXPECT_EQ(Decl::Var, findUnqualifiedDecl(AST, "yyy").getKind()); +} + TEST(ParsedASTTest, TokensAfterPreamble) { TestTU TU; TU.AdditionalFiles["foo.h"] = R"( Index: clang-tools-extra/clangd/ParsedAST.cpp === --- clang-tools-extra/clangd/ParsedAST.cpp +++ clang-tools-extra/clangd/ParsedAST.cpp @@ -256,6 +256,9 @@ // Recovery expression currently only works for C++. if (CI->getLangOpts()->CPlusPlus) CI->getLangOpts()->RecoveryAST = Opts.BuildRecoveryAST; + // This is on-by-default in windows to allow parsing SDK headers, but it + // breaks many features. Disable it for the main-file (not preamble). + CI->getLangOpts()->DelayedTemplateParsing = false; StoreDiags ASTDiags; std::string Content = std::string(Buffer->getBuffer()); Index: clang-tools-extra/clangd/unittests/ParsedASTTests.cpp === --- clang-tools-extra/clangd/unittests/ParsedASTTests.cpp +++ clang-tools-extra/clangd/unittests/ParsedASTTests.cpp @@ -175,6 +175,17 @@ AllOf(DeclNamed("foo"), WithTemplateArgs(""))})); } +TEST(ParsedASTTest, IgnoresDelayedTemplateParsing) { + auto TU = TestTU::withCode(R"cpp( +template void xxx() { + int yyy = 0; +} + )cpp"); + TU.ExtraArgs.push_back("-fdelayed-template-parsing"); + auto AST = TU.build(); + EXPECT_EQ(Decl::Var, findUnqualifiedDecl(AST, "yyy").getKind()); +} + TEST(ParsedASTTest, TokensAfterPreamble) { TestTU TU; TU.AdditionalFiles["foo.h"] = R"( Index: clang-tools-extra/clangd/ParsedAST.cpp === --- clang-tools-extra/clangd/ParsedAST.cpp +++ clang-tools-extra/clangd/ParsedAST.cpp @@ -256,6 +256,9 @@ // Recovery expression currently only works for C++. if (CI->getLangOpts()->CPlusPlus) CI->getLangOpts()->RecoveryAST = Opts.BuildRecoveryAST; + // This is on-by-default in windows to allow parsing SDK headers, but it + // breaks many features. Disable it for the main-file (not preamble). + CI->getLangOpts()->DelayedTemplateParsing = false; StoreDiags ASTDiags; std::string Content = std::string(Buffer->getBuffer()); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits