Author: lhames Date: Fri Jun 16 19:12:38 2017 New Revision: 305619 URL: http://llvm.org/viewvc/llvm-project?rev=305619&view=rev Log: Call setMustBuildLookupTable on TagDecls in ExternalASTMerger
Summary: setMustBuildLookupTable should be called on imported TagDecls otherwise we may fail to import their member decls (if they have any). Not calling the setMustBuildLookupTable method results in a failure in the attached test case when lookup for the 'x' member fails on struct S, which hasn't had its decls imported elsewhere. (By contrast the member-in-struct testcase hasn't run into this issue because the import of its decls is triggered when the struct instance is defined, and the member access follows this). Reviewers: spyffe, rsmith Reviewed By: spyffe, rsmith Differential Revision: https://reviews.llvm.org/D34253 Added: cfe/trunk/test/Import/indirect-struct-member-access/ cfe/trunk/test/Import/indirect-struct-member-access/Inputs/ cfe/trunk/test/Import/indirect-struct-member-access/Inputs/S.c cfe/trunk/test/Import/indirect-struct-member-access/test.c Modified: cfe/trunk/lib/AST/ExternalASTMerger.cpp Modified: cfe/trunk/lib/AST/ExternalASTMerger.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExternalASTMerger.cpp?rev=305619&r1=305618&r2=305619&view=diff ============================================================================== --- cfe/trunk/lib/AST/ExternalASTMerger.cpp (original) +++ cfe/trunk/lib/AST/ExternalASTMerger.cpp Fri Jun 16 19:12:38 2017 @@ -41,6 +41,7 @@ public: Decl *Imported(Decl *From, Decl *To) override { if (auto ToTag = dyn_cast<TagDecl>(To)) { ToTag->setHasExternalLexicalStorage(); + ToTag->setMustBuildLookupTable(); } else if (auto ToNamespace = dyn_cast<NamespaceDecl>(To)) { ToNamespace->setHasExternalVisibleStorage(); } Added: cfe/trunk/test/Import/indirect-struct-member-access/Inputs/S.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Import/indirect-struct-member-access/Inputs/S.c?rev=305619&view=auto ============================================================================== --- cfe/trunk/test/Import/indirect-struct-member-access/Inputs/S.c (added) +++ cfe/trunk/test/Import/indirect-struct-member-access/Inputs/S.c Fri Jun 16 19:12:38 2017 @@ -0,0 +1,3 @@ +struct S { + int a; +}; Added: cfe/trunk/test/Import/indirect-struct-member-access/test.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Import/indirect-struct-member-access/test.c?rev=305619&view=auto ============================================================================== --- cfe/trunk/test/Import/indirect-struct-member-access/test.c (added) +++ cfe/trunk/test/Import/indirect-struct-member-access/test.c Fri Jun 16 19:12:38 2017 @@ -0,0 +1,4 @@ +// RUN: clang-import-test -import %S/Inputs/S.c -expression %s +void expr(struct S *MyS) { + MyS->a = 3; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits