<div dir="ltr">Use a ctor-initializer for OldSanOpts.<div><br></div><div>Do you need to handle the assignment operator too? A test for move constructors / move assignments would be great, too (not that I expect any problems there).</div>
<div><br></div><div>Do you care that the UBSan checks will still be enabled when CGF.getLangOpts().getGC() != LangOptions::NonGC? We seem to also fail to memcpy non-GC'd fields in that case too =)</div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Mon, Sep 9, 2013 at 3:03 PM, Nick Lewycky <span dir="ltr"><<a href="mailto:nlewycky@google.com" target="_blank">nlewycky@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">The attached patch disables the bool and enum sanitizers when emitting the implicitly-defined copy constructor.<div><br></div><div>To start with an example:</div><div>  struct X { X(); X(const X&); };</div>


<div>  struct Y { X x; bool b; };</div><div>if you don't initialize Y::b then try to copy an object of Y type, ubsan will complain. Technically, with the standard as written, ubsan is correct. However, this is a useful thing to do -- you may have a discriminator which decides which elements are not interesting and therefore never initialize or read them. Secondly, it's a departure from the rules in C, making well-defined C code have undefined behaviour in C++ (structs are never trap values, see C99 6.2.6.1p6). Thirdly, it's checked incompletely right now -- if you make subtle changes (f.e. add an "int i;" member to Y) ubsan will stop complaining. The semantic I'm implementing is as if the implicit copy constructor is copying the value representation (the bytes) not the object representation (the meaning of those bytes).<span class="HOEnZb"><font color="#888888"><br>


</font></span></div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Nick<br></div></font></span></div>
<br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>