<div dir="ltr"><div style>Thanks for review, Dmitri!</div><div style>Updated patch attached. </div><div><br></div>On 23 January 2013 23:52, Dmitri Gribenko <span dir="ltr"><<a href="mailto:gribozavr@gmail.com" target="_blank">gribozavr@gmail.com</a>></span> wrote:<br>

<div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="im">

On Wed, Jan 23, 2013 at 11:33 PM, Alexander Zinenko <<a href="mailto:ftynse@gmail.com">ftynse@gmail.com</a>> wrote:<br>
> Thanks for feedback! Here is an updated version. It warns by default in case<br>
> of virtual base or in case of nonzero offset. Other up/downcasts lead to a<br>
> warning with -Wreinterpret-updown-extra, ignored by default.<br>
<br>
</div>I think it is sensible to leave the warning on by default.  The<br>
purpose of a separate flag is to turn off the (possibly) noisy case<br>
separately.<br></blockquote><div><div>Having it on by default, clang fails to pass these tests:</div></div><div><div>    Clang :: Analysis/inlining/dyn-dispatch-bifurcate.cpp</div><div>    Clang :: SemaCXX/address-space-conversion.cpp</div>

</div><div><div>That's why the noisy version was disabled by default even in the first version.</div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<br>
I am not a fan of the name '-Wreinterpret-updown-extra'.<br>
-Wreinterpret-updown-zero-adjustment or -Wreinterpret-updown-safe<br>
might be better.<br></blockquote><div><div>Changed to -Wreinterpret-updown-zero-adjustment. -Wreinterpret-updown-safe is a bit misleading: why warn about safe things?</div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<br>
+  // subobject with offset<br>
<br>
Comments should start with a capital letter and end with a period.<br>
<br>
+/// ReinterpretUpDownCast - Check that a reinterpret_cast\<DestType\>(SrcExpr)<br>
+/// is not used as upcast or downcast between respective pointers or<br>
+/// references.<br>
<br>
Please don't duplicate function name in comments when adding new code.<br>
<br>
+static void ReinterpretUpDownCast(Sema &Self, ExprResult &SrcExpr,<br>
<br>
A better name: DiagnoseReinterpretUpDownCast?<br>
<br>
+  CharUnits offset = CharUnits::Zero();<br>
<br>
s/offset/Offset/<br>
<br>
+def warn_reinterpret_updowncast : Warning<<br>
+  "'reinterpret_cast' is used as an %select{upcast|downcast}0 from type %1 "<br>
+  "to its %select{base|derived}0 type %2">,<br>
<br>
(1) Trailing whitespace.<br>
<br>
(2) It would be better to do "%select{an upcast|a downcast}" or we<br>
would print "an downcast".<br>
<br>
+def warn_reinterpret_wrong_subobject : Warning<<br>
+  "'reinterpret_cast' might result in pointing to wrong subobject">,<br>
<br>
... might return a pointer... ?<br>
<br>
+def note_reinterpret_updowncast_use_static_cast : Note<<br>
+  "use of 'static_cast' adjusts the pointer correctly while "<br>
+  "%select{upcasting|downcasting}0">;<br>
<br>
"use 'static_cast' to adjust the pointer correctly ..." ?<br>
<br>
+def note_reinterpret_virtual_base : Note<<br>
+  "casting %select{to|from}0 virtual base type %1 %select{from|to}0 "<br>
+  "its derived type %2">, InGroup<ReinterpretUpDownCast>;<br>
<br>
Notes should not be put in groups.<br>
<br>
+  InGroup<ReinterpretUpDownCast>, DefaultWarn;<br>
<br>
DefaultWarn can be dropped here.<br></blockquote><div style>Fixed.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<span class=""><font color="#888888"><br>
Dmitri<br>
<br>
--<br>
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if<br>
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <<a href="mailto:gribozavr@gmail.com">gribozavr@gmail.com</a>>*/<br>
</font></span></blockquote></div><br></div></div>