<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">(Dropping Phabricator, since this isn't really about D27163...)</div><div class="gmail_quote"><br></div><div class="gmail_quote">On 28 November 2016 at 14:27, John McCall via Phabricator 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"><span class="">In <a href="https://reviews.llvm.org/D27163#607100" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D27163#607100</a>, @rsmith wrote:<br></span><span class="">> C has rather different and much less useful TBAA rules<br>
<br>
</span>[...] I don't think the TBAA rules are as different as you're suggesting,</blockquote><div><br></div><div>I can offhand think of at least the following differences, some of which seem fairly major:</div><div> * C does not allow changing the effective type of a declared variable, C++ does.</div><div> * C does not support struct-path TBAA in any form (its model is that lumps of memory have effective types, and it doesn't care how you got there), C++ does.</div><div> * C allows any assignment to a union member to change the effective type, no matter whether it's locally determinable that you're storing to a union member, C++ requires the assignment's LHS to be a union member access.</div><div> * C only permits common initial sequence shenanigans for unions where the union type is visible, C++ permits it anywhere.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">except that C++ actually tries to provide specific rules for unions (that don't match what users actually want). </blockquote><div><br></div><div>In what way don't C++'s union rules match user expectations where C's rules do? Do you mean type punning via unions? C doesn't allow that either (or maybe it does, if you think a footnote carries more normative weight than rules in the main text).</div></div></div></div>