r310706 - [modules] Set the lexical DC for dummy tag decls that refer to hidden

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 11 17:29:30 PDT 2017


On 11 August 2017 at 17:20, Bruno Cardoso Lopes via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Hi Alex,
>
> On Fri, Aug 11, 2017 at 9:06 AM, Alex Lorenz via cfe-commits
> <cfe-commits at 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
> > +
> > + at 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 at 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 at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170811/cc1d0f6c/attachment-0001.html>


More information about the cfe-commits mailing list