On 11 August 2017 at 17:20, Bruno Cardoso Lopes via cfe-commits < cfe-commits@lists.llvm.org> wrote:
> Hi Alex, > > On Fri, Aug 11, 2017 at 9:06 AM, Alex Lorenz via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > > Author: arphaman > > Date: Fri Aug 11 05:06:52 2017 > > New Revision: 310706 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=310706&view=rev > > Log: > > [modules] Set the lexical DC for dummy tag decls that refer to hidden > > declarations that are made visible after the dummy is parsed and ODR > verified > > > > Prior to this commit the > > "(getContainingDC(DC) == CurContext && "The next DeclContext should be > lexically contained in the current one.")," > > assertion failure was triggered during semantic analysis of the dummy > > tag declaration that was declared in another tag declaration because its > > lexical context did not point to the outer tag decl. > > > > rdar://32292196 > > > > Added: > > cfe/trunk/test/Modules/Inputs/innerstructredef.h > > cfe/trunk/test/Modules/inner-struct-redefines-invisible.m > > Modified: > > cfe/trunk/lib/Sema/SemaDecl.cpp > > cfe/trunk/test/Modules/Inputs/module.map > > > > Modified: cfe/trunk/lib/Sema/SemaDecl.cpp > > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/ > SemaDecl.cpp?rev=310706&r1=310705&r2=310706&view=diff > > ============================================================ > ================== > > --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) > > +++ cfe/trunk/lib/Sema/SemaDecl.cpp Fri Aug 11 05:06:52 2017 > > @@ -13722,6 +13722,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned > > // comparison. > > SkipBody->CheckSameAsPrevious = true; > > SkipBody->New = createTagFromNewDecl(); > > + SkipBody->New->setLexicalDeclContext(CurContext); > > I think it would be cleaner to do this inside "createTagFromNewDecl" than > here. I agree. Either before or after that change, this seems sufficiently isolated and low-risk that it makes sense to take it for Clang 5. > > SkipBody->Previous = Hidden; > > } else { > > SkipBody->ShouldSkip = true; > > > > Added: cfe/trunk/test/Modules/Inputs/innerstructredef.h > > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/ > innerstructredef.h?rev=310706&view=auto > > ============================================================ > ================== > > --- cfe/trunk/test/Modules/Inputs/innerstructredef.h (added) > > +++ cfe/trunk/test/Modules/Inputs/innerstructredef.h Fri Aug 11 > 05:06:52 2017 > > @@ -0,0 +1,6 @@ > > +struct Outer { > > +// This definition is actually hidden since only submodule 'one' is > imported. > > +struct Inner { > > + int x; > > +} field; > > +}; > > > > Modified: cfe/trunk/test/Modules/Inputs/module.map > > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ > Modules/Inputs/module.map?rev=310706&r1=310705&r2=310706&view=diff > > ============================================================ > ================== > > --- cfe/trunk/test/Modules/Inputs/module.map (original) > > +++ cfe/trunk/test/Modules/Inputs/module.map Fri Aug 11 05:06:52 2017 > > @@ -451,3 +451,12 @@ module DebugNestedB { > > module objcAtKeywordMissingEnd { > > header "objcAtKeywordMissingEnd.h" > > } > > + > > +module innerstructredef { > > + module one { > > + header "empty.h" > > + } > > + module two { > > + header "innerstructredef.h" > > + } > > +} > > > > Added: cfe/trunk/test/Modules/inner-struct-redefines-invisible.m > > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ > Modules/inner-struct-redefines-invisible.m?rev=310706&view=auto > > ============================================================ > ================== > > --- cfe/trunk/test/Modules/inner-struct-redefines-invisible.m (added) > > +++ cfe/trunk/test/Modules/inner-struct-redefines-invisible.m Fri Aug > 11 05:06:52 2017 > > @@ -0,0 +1,12 @@ > > +// RUN: rm -rf %t > > +// RUN: %clang_cc1 -fsyntax-only -I%S/Inputs -fmodules > -fimplicit-module-maps -fmodules-cache-path=%t -verify %s > > +// expected-no-diagnostics > > + > > +@import innerstructredef.one; > > + > > +struct Outer { > > +// Should set lexical context when parsing 'Inner' here, otherwise > there's a crash: > > +struct Inner { > > + int x; > > +} field; > > +}; > > > > > > _______________________________________________ > > cfe-commits mailing list > > cfe-commits@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > > > -- > Bruno Cardoso Lopes > http://www.brunocardoso.cc > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits