Re: r310706 - [modules] Set the lexical DC for dummy tag decls that refer to hidden
Merged in r310902. Thanks, Hans On Mon, Aug 14, 2017 at 4:03 AM, Alex L wrote: > Sure, I committed r310829 which moves the lexical decl adjustment. > > Hans, can you please merge r310706 with r310829. > > Cheers, > Alex > > On 12 August 2017 at 01:29, Richard Smith wrote: >> >> On 11 August 2017 at 17:20, Bruno Cardoso Lopes via cfe-commits >> wrote: >>> >>> Hi Alex, >>> >>> On Fri, Aug 11, 2017 at 9:06 AM, Alex Lorenz via cfe-commits >>> 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:
Re: r310706 - [modules] Set the lexical DC for dummy tag decls that refer to hidden
Sure, I committed r310829 which moves the lexical decl adjustment. Hans, can you please merge r310706 with r310829. Cheers, Alex On 12 August 2017 at 01:29, Richard Smith wrote: > 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 >> 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/SemaD >> ecl.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.l
Re: r310706 - [modules] Set the lexical DC for dummy tag decls that refer to hidden
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 > 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
Re: r310706 - [modules] Set the lexical DC for dummy tag decls that refer to hidden
Hi Alex, On Fri, Aug 11, 2017 at 9:06 AM, Alex Lorenz via cfe-commits 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. >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
Re: r310706 - [modules] Set the lexical DC for dummy tag decls that refer to hidden
Hi Hans & Richard, Is it possible to get this merged into LLVM 5.0? Cheers, Alex On 11 August 2017 at 13:06, 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); >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 > ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r310706 - [modules] Set the lexical DC for dummy tag decls that refer to hidden
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); 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