diff options
author | Nico Weber <nicolasweber@gmx.de> | 2019-10-13 13:15:27 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2019-10-13 13:15:27 +0000 |
commit | 51fa7409e7be48f77e16c31d7e61e7de49310163 (patch) | |
tree | c20f20506ae2e1dca8f333cc814831c3a860897e | |
parent | 2c775709f6c23c691969cc900535b4ce339668c5 (diff) | |
download | bcm5719-llvm-51fa7409e7be48f77e16c31d7e61e7de49310163.tar.gz bcm5719-llvm-51fa7409e7be48f77e16c31d7e61e7de49310163.zip |
Make most clangd unittests pass on Windows
The Windows triple currently turns on delayed template parsing, which
confuses several unit tests that use templates.
For now, just explicitly disable delayed template parsing. This isn't
ideal, but:
- the Windows triple will soon no longer use delayed template parsing
by default
- there's precedent for this in the clangd unit tests already
- let's get the clangd tests pass on Windows first before making
behavioral changes
Part of PR43592.
llvm-svn: 374718
8 files changed, 57 insertions, 7 deletions
diff --git a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp index bf100630b30..9e1f1c18989 100644 --- a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp +++ b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp @@ -226,18 +226,26 @@ TEST_F(TargetDeclTest, Types) { EXPECT_DECLS("TypedefTypeLoc", {"typedef S X", Rel::Alias}, {"struct S", Rel::Underlying}); + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + Flags = {"-fno-delayed-template-parsing"}; Code = R"cpp( template<class T> void foo() { [[T]] x; } )cpp"; // FIXME: We don't do a good job printing TemplateTypeParmDecls, apparently! EXPECT_DECLS("TemplateTypeParmTypeLoc", ""); + Flags.clear(); + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + Flags = {"-fno-delayed-template-parsing"}; Code = R"cpp( template<template<typename> class T> void foo() { [[T<int>]] x; } )cpp"; EXPECT_DECLS("TemplateSpecializationTypeLoc", "template <typename> class T"); + Flags.clear(); Code = R"cpp( struct S{}; @@ -394,6 +402,10 @@ TEST_F(TargetDeclTest, Lambda) { } TEST_F(TargetDeclTest, OverloadExpr) { + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + Flags = {"-fno-delayed-template-parsing"}; + Code = R"cpp( void func(int*); void func(char*); @@ -509,6 +521,10 @@ protected: TestTU TU; TU.Code = Code; + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + TU.ExtraArgs.push_back("-fno-delayed-template-parsing"); + auto AST = TU.build(); auto *TestDecl = &findDecl(AST, "foo"); diff --git a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp index 53e2f4b68e1..04a57676934 100644 --- a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp +++ b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp @@ -144,6 +144,9 @@ TEST(ParsedASTTest, template <> int foo<bool> = 0; )cpp"; + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + TU.ExtraArgs.push_back("-fno-delayed-template-parsing"); auto AST = TU.build(); EXPECT_THAT( diff --git a/clang-tools-extra/clangd/unittests/SelectionTests.cpp b/clang-tools-extra/clangd/unittests/SelectionTests.cpp index e2cbff37b3d..309f4c0dbcd 100644 --- a/clang-tools-extra/clangd/unittests/SelectionTests.cpp +++ b/clang-tools-extra/clangd/unittests/SelectionTests.cpp @@ -289,7 +289,15 @@ TEST(SelectionTest, CommonAncestor) { }; for (const Case &C : Cases) { Annotations Test(C.Code); - auto AST = TestTU::withCode(Test.code()).build(); + + TestTU TU; + TU.Code = Test.code(); + + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + TU.ExtraArgs.push_back("-fno-delayed-template-parsing"); + + auto AST = TU.build(); auto T = makeSelectionTree(C.Code, AST); EXPECT_EQ("TranslationUnitDecl", nodeKind(&T.root())) << C.Code; diff --git a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp index 8003e359bbb..1085b6f4928 100644 --- a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp +++ b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp @@ -99,7 +99,13 @@ void checkHighlightings(llvm::StringRef Code, /*FileContent*/ llvm::StringRef>> AdditionalFiles = {}) { Annotations Test(Code); - auto TU = TestTU::withCode(Test.code()); + TestTU TU; + TU.Code = Test.code(); + + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + TU.ExtraArgs.push_back("-fno-delayed-template-parsing"); + for (auto File : AdditionalFiles) TU.AdditionalFiles.insert({File.first, File.second}); auto AST = TU.build(); @@ -720,4 +726,4 @@ TEST(SemanticHighlighting, DiffBeyondTheEndOfFile) { } // namespace } // namespace clangd -} // namespace clang
\ No newline at end of file +} // namespace clang diff --git a/clang-tools-extra/clangd/unittests/TweakTesting.cpp b/clang-tools-extra/clangd/unittests/TweakTesting.cpp index 2e72cbd0a70..63ecd7b4d4d 100644 --- a/clang-tools-extra/clangd/unittests/TweakTesting.cpp +++ b/clang-tools-extra/clangd/unittests/TweakTesting.cpp @@ -82,9 +82,11 @@ std::string TweakTest::apply(llvm::StringRef MarkedCode) const { std::string WrappedCode = wrap(Context, MarkedCode); Annotations Input(WrappedCode); auto Selection = rangeOrPoint(Input); + TestTU TU; TU.HeaderCode = Header; TU.Code = Input.code(); + TU.ExtraArgs = ExtraArgs; ParsedAST AST = TU.build(); Tweak::Selection S(AST, Selection.first, Selection.second); diff --git a/clang-tools-extra/clangd/unittests/TweakTesting.h b/clang-tools-extra/clangd/unittests/TweakTesting.h index 6817e727699..1e8cd58849b 100644 --- a/clang-tools-extra/clangd/unittests/TweakTesting.h +++ b/clang-tools-extra/clangd/unittests/TweakTesting.h @@ -55,6 +55,9 @@ protected: // testcases. std::string Header; + // Extra flags passed to the compilation in apply(). + std::vector<const char *> ExtraArgs; + // Context in which snippets of code should be placed to run tweaks. CodeContext Context = File; diff --git a/clang-tools-extra/clangd/unittests/TweakTests.cpp b/clang-tools-extra/clangd/unittests/TweakTests.cpp index 8cc29dd182b..36efbef0a1a 100644 --- a/clang-tools-extra/clangd/unittests/TweakTests.cpp +++ b/clang-tools-extra/clangd/unittests/TweakTests.cpp @@ -481,6 +481,7 @@ TEST_F(ExpandMacroTest, Test) { TWEAK_TEST(ExpandAutoType); TEST_F(ExpandAutoTypeTest, Test) { + Header = R"cpp( namespace ns { struct Class { @@ -507,9 +508,6 @@ TEST_F(ExpandAutoTypeTest, Test) { // check that namespaces are shortened EXPECT_EQ(apply("namespace ns { void f() { ^auto C = Class(); } }"), "namespace ns { void f() { Class C = Class(); } }"); - // unknown types in a template should not be replaced - EXPECT_THAT(apply("template <typename T> void x() { ^auto y = T::z(); }"), - StartsWith("fail: Could not deduce type for 'auto' type")); // undefined functions should not be replaced EXPECT_THAT(apply("au^to x = doesnt_exist();"), StartsWith("fail: Could not deduce type for 'auto' type")); @@ -530,6 +528,13 @@ TEST_F(ExpandAutoTypeTest, Test) { R"cpp(const char * x = "test")cpp"); EXPECT_UNAVAILABLE("dec^ltype(au^to) x = 10;"); + + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + ExtraArgs.push_back("-fno-delayed-template-parsing"); + // unknown types in a template should not be replaced + EXPECT_THAT(apply("template <typename T> void x() { ^auto y = T::z(); }"), + StartsWith("fail: Could not deduce type for 'auto' type")); } TWEAK_TEST(ExtractFunction); diff --git a/clang-tools-extra/clangd/unittests/XRefsTests.cpp b/clang-tools-extra/clangd/unittests/XRefsTests.cpp index 60cba82492d..aafcb475baa 100644 --- a/clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ b/clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -462,7 +462,14 @@ TEST(LocateSymbol, All) { if (!T.ranges("def").empty()) WantDef = T.range("def"); - auto AST = TestTU::withCode(T.code()).build(); + TestTU TU; + TU.Code = T.code(); + + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + TU.ExtraArgs.push_back("-fno-delayed-template-parsing"); + + auto AST = TU.build(); auto Results = locateSymbolAt(AST, T.point()); if (!WantDecl) { |