<div dir="ltr"><span style="font-size:12.800000190734863px">Hi Hans & Richard,</span><div><span style="font-size:12.800000190734863px"><br></span></div><div><span style="font-size:12.800000190734863px">Is it possible to get this merged into LLVM 5.0?</span><br style="font-size:12.800000190734863px"><br></div><div>Cheers,</div><div>Alex</div><div class="gmail_extra"><br><div class="gmail_quote">On 11 August 2017 at 13:06, Alex Lorenz via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: arphaman<br>
Date: Fri Aug 11 05:06:52 2017<br>
New Revision: 310706<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=310706&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=310706&view=rev</a><br>
Log:<br>
[modules] Set the lexical DC for dummy tag decls that refer to hidden<br>
declarations that are made visible after the dummy is parsed and ODR verified<br>
<br>
Prior to this commit the<br>
"(getContainingDC(DC) == CurContext && "The next DeclContext should be lexically contained in the current one."),"<br>
assertion failure was triggered during semantic analysis of the dummy<br>
tag declaration that was declared in another tag declaration because its<br>
lexical context did not point to the outer tag decl.<br>
<br>
rdar://32292196<br>
<br>
Added:<br>
    cfe/trunk/test/Modules/Inputs/<wbr>innerstructredef.h<br>
    cfe/trunk/test/Modules/inner-<wbr>struct-redefines-invisible.m<br>
Modified:<br>
    cfe/trunk/lib/Sema/SemaDecl.<wbr>cpp<br>
    cfe/trunk/test/Modules/Inputs/<wbr>module.map<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaDecl.<wbr>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=310706&r1=310705&r2=310706&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/Sema/<wbr>SemaDecl.cpp?rev=310706&r1=<wbr>310705&r2=310706&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Sema/SemaDecl.<wbr>cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaDecl.<wbr>cpp Fri Aug 11 05:06:52 2017<br>
@@ -13722,6 +13722,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned<br>
                   // comparison.<br>
                   SkipBody->CheckSameAsPrevious = true;<br>
                   SkipBody->New = createTagFromNewDecl();<br>
+                  SkipBody->New-><wbr>setLexicalDeclContext(<wbr>CurContext);<br>
                   SkipBody->Previous = Hidden;<br>
                 } else {<br>
                   SkipBody->ShouldSkip = true;<br>
<br>
Added: cfe/trunk/test/Modules/Inputs/<wbr>innerstructredef.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/innerstructredef.h?rev=310706&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>Modules/Inputs/<wbr>innerstructredef.h?rev=310706&<wbr>view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/Modules/Inputs/<wbr>innerstructredef.h (added)<br>
+++ cfe/trunk/test/Modules/Inputs/<wbr>innerstructredef.h Fri Aug 11 05:06:52 2017<br>
@@ -0,0 +1,6 @@<br>
+struct Outer {<br>
+// This definition is actually hidden since only submodule 'one' is imported.<br>
+struct Inner {<br>
+  int x;<br>
+} field;<br>
+};<br>
<br>
Modified: cfe/trunk/test/Modules/Inputs/<wbr>module.map<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/module.map?rev=310706&r1=310705&r2=310706&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>Modules/Inputs/module.map?rev=<wbr>310706&r1=310705&r2=310706&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/Modules/Inputs/<wbr>module.map (original)<br>
+++ cfe/trunk/test/Modules/Inputs/<wbr>module.map Fri Aug 11 05:06:52 2017<br>
@@ -451,3 +451,12 @@ module DebugNestedB {<br>
 module objcAtKeywordMissingEnd {<br>
   header "objcAtKeywordMissingEnd.h"<br>
 }<br>
+<br>
+module innerstructredef {<br>
+  module one {<br>
+    header "empty.h"<br>
+  }<br>
+  module two {<br>
+   header "innerstructredef.h"<br>
+  }<br>
+}<br>
<br>
Added: cfe/trunk/test/Modules/inner-<wbr>struct-redefines-invisible.m<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/inner-struct-redefines-invisible.m?rev=310706&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>Modules/inner-struct-<wbr>redefines-invisible.m?rev=<wbr>310706&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/Modules/inner-<wbr>struct-redefines-invisible.m (added)<br>
+++ cfe/trunk/test/Modules/inner-<wbr>struct-redefines-invisible.m Fri Aug 11 05:06:52 2017<br>
@@ -0,0 +1,12 @@<br>
+// RUN: rm -rf %t<br>
+// RUN: %clang_cc1 -fsyntax-only -I%S/Inputs -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -verify %s<br>
+// expected-no-diagnostics<br>
+<br>
+@import innerstructredef.one;<br>
+<br>
+struct Outer {<br>
+// Should set lexical context when parsing 'Inner' here, otherwise there's a crash:<br>
+struct Inner {<br>
+  int x;<br>
+} field;<br>
+};<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>