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

2017-08-14 Thread Hans Wennborg via cfe-commits
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=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=310705=310706=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=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=310705=310706=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=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;
>>> > +};
>>> >
>>> >
>>> > ___
>>> > 

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

2017-08-14 Thread Alex L via cfe-commits
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=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=310705=310706=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=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=310705=310706=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=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
>> 

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

2017-08-11 Thread Richard Smith via cfe-commits
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=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=310705=310706=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=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=310705=310706=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=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

2017-08-11 Thread Bruno Cardoso Lopes via cfe-commits
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=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=310705=310706=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=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=310705=310706=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=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

2017-08-11 Thread Alex L via cfe-commits
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=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=310705=310706=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=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=310705=310706=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=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

2017-08-11 Thread Alex Lorenz via cfe-commits
Author: arphaman
Date: Fri Aug 11 05:06:52 2017
New Revision: 310706

URL: http://llvm.org/viewvc/llvm-project?rev=310706=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=310705=310706=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=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=310705=310706=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=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