<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div><div>On Jan 25, 2013, at 2:22 PM, Nick Lewycky <<a href="mailto:nlewycky@google.com">nlewycky@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr">On 25 January 2013 10:18, Douglas Gregor <span dir="ltr"><<a href="mailto:dgregor@apple.com" target="_blank">dgregor@apple.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="HOEnZb"><div class="h5"><br>
On Jan 25, 2013, at 2:32 AM, Nick Lewycky <<a href="mailto:nlewycky@google.com">nlewycky@google.com</a>> wrote:<br>
<br>
> This patch fixes a problem where the PCH fails to faithfully represent the state of Sema, causing it to drop some -Wundefined-internal diagnostics across PCH boundaries.<br>
><br>
> While there I noticed that KnownNamespaces was being emitted in an indeterminate order and added code to sort them deterministically.<br>
><br>
> Please review!<br>
<br>
</div></div>(Quoting patches on a phone is awful)<br>
<br>
Serialization bits look good.<br>
<br>
Rather than sorting based on source location, how about just changing Sema's data structures for both of these to MapVectors?<br></blockquote><div><br></div><div style="">Done.</div><div style=""><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Also, I'd rather not renumber the record codes. It's fine to just append to the list, because order is irrelevant.<br></blockquote><div style=""><br></div><div style="">Done.</div><div><br></div><div style="">Updated patch attached. Please review!</div>

</div></div></div></blockquote><br></div><div><div>Index: test/PCH/undefined-internal.c</div><div>===================================================================</div><div>--- test/PCH/undefined-internal.c<span class="Apple-tab-span" style="white-space:pre">        </span>(revision 0)</div><div>+++ test/PCH/undefined-internal.c<span class="Apple-tab-span" style="white-space:pre">        </span>(revision 0)</div><div>@@ -0,0 +1,7 @@</div><div>+// RUN: %clang_cc1 -emit-pch %S/Inputs/undefined-internal-1.h -o %t</div><div>+// RUN: %clang_cc1 -include-pch %t %s -verify</div><div>+</div><div>+static void g() {}</div><div>+</div><div>+// expected-warning@1{{function 'f' has internal linkage but is not defined}}</div><div>+// expected-note@4{{used here}}</div><div>Index: test/PCH/Inputs/undefined-internal-1.h</div><div>===================================================================</div><div>--- test/PCH/Inputs/undefined-internal-1.h<span class="Apple-tab-span" style="white-space:pre">     </span>(revision 0)</div><div>+++ test/PCH/Inputs/undefined-internal-1.h<span class="Apple-tab-span" style="white-space:pre">       </span>(revision 0)</div><div>@@ -0,0 +1,6 @@</div><div>+static void f();</div><div>+static void g();</div><div>+void h() {</div><div>+  f();</div><div>+  g();</div><div>+}</div><div><br></div><div>You can use #define tricks to collapse this into a single .c file, rather than having a separate .h file, e.g.,</div><div><br></div><div><div>// RUN: %clang_cc1 -emit-pch %s -o %t</div><div>// RUN: %clang_cc1 -include-pch %t %s -verify</div></div><div>#ifndef HEADER_H</div><div>#define HEADER_H</div><div>static void f();</div><div>static void g();</div><div>void h() {</div><div>  f();</div><div>  g();</div><div>}</div><div>#else</div><div>static void g()</div><div><br></div><div>// expected-warning@NNN{{function 'f' has internal linkage but is not defined}}</div><div>// expected-note@MMM{{used here}}</div><div>#endif</div><div><br></div><div>With that tweak, LGTM.</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>- Doug</div></div><br></div></body></html>