I haven't found out the root cause yet. I have disabled this test to make the buildbot happey. Will continue to investigate tomorrow.
On Mon, 12 Oct 2020 at 15:45, Hubert Tong <hubert.reinterpretc...@gmail.com> wrote: > On Mon, Oct 12, 2020 at 9:43 AM Haojian Wu <hokein...@gmail.com> wrote: > >> sorry, I'm looking at it. >> > No problem, thanks! > > >> On Mon, 12 Oct 2020 at 15:35, Hubert Tong < >> hubert.reinterpretc...@gmail.com> wrote: >> >>> ParsedASTTest.TopLevelDecls has not recovered on clang-ppc64le-rhel >>> since this went in (even when including >>> f1bf41e433e196ecffcc4fb7cd04c58d48445425, which is purported to fix >>> buildbot failures from this commit). >>> >>> http://lab.llvm.org:8011/#/builders/57/builds/81 >>> >>> On Mon, Oct 12, 2020 at 5:06 AM Haojian Wu via cfe-commits < >>> cfe-commits@lists.llvm.org> wrote: >>> >>>> >>>> Author: Haojian Wu >>>> Date: 2020-10-12T10:46:18+02:00 >>>> New Revision: 702529d899c87e9268bb33d836dbc91b6bce0b16 >>>> >>>> URL: >>>> https://github.com/llvm/llvm-project/commit/702529d899c87e9268bb33d836dbc91b6bce0b16 >>>> DIFF: >>>> https://github.com/llvm/llvm-project/commit/702529d899c87e9268bb33d836dbc91b6bce0b16.diff >>>> >>>> LOG: [clang] Fix returning the underlying VarDecl as top-level decl for >>>> VarTemplateDecl. >>>> >>>> Given the following VarTemplateDecl AST, >>>> >>>> ``` >>>> VarTemplateDecl col:26 X >>>> |-TemplateTypeParmDecl typename depth 0 index 0 >>>> `-VarDecl X 'bool' cinit >>>> `-CXXBoolLiteralExpr 'bool' true >>>> ``` >>>> >>>> previously, we returned the VarDecl as the top-level decl, which was not >>>> correct, the top-level decl should be VarTemplateDecl. >>>> >>>> Differential Revision: https://reviews.llvm.org/D89098 >>>> >>>> Added: >>>> >>>> >>>> Modified: >>>> clang-tools-extra/clangd/unittests/ParsedASTTests.cpp >>>> clang/lib/Parse/ParseDecl.cpp >>>> >>>> Removed: >>>> >>>> >>>> >>>> >>>> ################################################################################ >>>> diff --git a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp >>>> b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp >>>> index 65d9cffeedc7..db23438766d2 100644 >>>> --- a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp >>>> +++ b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp >>>> @@ -57,6 +57,12 @@ MATCHER_P(DeclNamed, Name, "") { >>>> return false; >>>> } >>>> >>>> +MATCHER_P(DeclKind, Kind, "") { >>>> + if (NamedDecl *ND = dyn_cast<NamedDecl>(arg)) >>>> + return ND->getDeclKindName() == Kind; >>>> + return false; >>>> +} >>>> + >>>> // Matches if the Decl has template args equal to ArgName. If the decl >>>> is a >>>> // NamedDecl and ArgName is an empty string it also matches. >>>> MATCHER_P(WithTemplateArgs, ArgName, "") { >>>> @@ -99,9 +105,15 @@ TEST(ParsedASTTest, TopLevelDecls) { >>>> int header1(); >>>> int header2; >>>> )"; >>>> - TU.Code = "int main();"; >>>> + TU.Code = R"cpp( >>>> + int main(); >>>> + template <typename> bool X = true; >>>> + )cpp"; >>>> auto AST = TU.build(); >>>> - EXPECT_THAT(AST.getLocalTopLevelDecls(), >>>> ElementsAre(DeclNamed("main"))); >>>> + EXPECT_THAT( >>>> + AST.getLocalTopLevelDecls(), >>>> + ElementsAreArray({AllOf(DeclNamed("main"), DeclKind("Function")), >>>> + AllOf(DeclNamed("X"), >>>> DeclKind("VarTemplate"))})); >>>> } >>>> >>>> TEST(ParsedASTTest, DoesNotGetIncludedTopDecls) { >>>> >>>> diff --git a/clang/lib/Parse/ParseDecl.cpp >>>> b/clang/lib/Parse/ParseDecl.cpp >>>> index 3f314c59ade6..01a16575c239 100644 >>>> --- a/clang/lib/Parse/ParseDecl.cpp >>>> +++ b/clang/lib/Parse/ParseDecl.cpp >>>> @@ -2195,6 +2195,7 @@ Decl >>>> *Parser::ParseDeclarationAfterDeclaratorAndAttributes( >>>> >>>> // Inform the current actions module that we just parsed this >>>> declarator. >>>> Decl *ThisDecl = nullptr; >>>> + Decl *OuterDecl = nullptr; >>>> switch (TemplateInfo.Kind) { >>>> case ParsedTemplateInfo::NonTemplate: >>>> ThisDecl = Actions.ActOnDeclarator(getCurScope(), D); >>>> @@ -2205,10 +2206,12 @@ Decl >>>> *Parser::ParseDeclarationAfterDeclaratorAndAttributes( >>>> ThisDecl = Actions.ActOnTemplateDeclarator(getCurScope(), >>>> >>>> *TemplateInfo.TemplateParams, >>>> D); >>>> - if (VarTemplateDecl *VT = >>>> dyn_cast_or_null<VarTemplateDecl>(ThisDecl)) >>>> + if (VarTemplateDecl *VT = >>>> dyn_cast_or_null<VarTemplateDecl>(ThisDecl)) { >>>> // Re-direct this decl to refer to the templated decl so that we >>>> can >>>> // initialize it. >>>> ThisDecl = VT->getTemplatedDecl(); >>>> + OuterDecl = VT; >>>> + } >>>> break; >>>> } >>>> case ParsedTemplateInfo::ExplicitInstantiation: { >>>> @@ -2385,8 +2388,7 @@ Decl >>>> *Parser::ParseDeclarationAfterDeclaratorAndAttributes( >>>> } >>>> >>>> Actions.FinalizeDeclaration(ThisDecl); >>>> - >>>> - return ThisDecl; >>>> + return OuterDecl ? OuterDecl : ThisDecl; >>>> } >>>> >>>> /// ParseSpecifierQualifierList >>>> >>>> >>>> >>>> _______________________________________________ >>>> cfe-commits mailing list >>>> cfe-commits@lists.llvm.org >>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>> >>>
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits