Thanks for feedback! Here is an updated version. It warns by default in case of virtual base or in case of nonzero offset. Other up/downcasts lead to a warning with -Wreinterpret-updown-extra, ignored by default.
On 23 January 2013 04:31, Jordan Rose <[email protected]> wrote: > > On Jan 22, 2013, at 16:08 , John McCall <[email protected]> wrote: > > On Jan 22, 2013, at 2:58 PM, Alexander Zinenko <[email protected]> wrote: > > The attached patch addresses http://llvm.org/bugs/show_bug.cgi?id=13824. > It emits a warning if reinterpret_cast is actually used to perform an > upcast or a downcast which might lead to segfault in some cases. > > > In most cases, this is actually safe, and I don't feel comfortable saying > it's unreasonable for code to rely on that. This warning should only fire > when the base subobject is in a virtual base or at a nonzero static offset. > > You can use a CXXBasePaths object with Sema::IsDerivedFrom in order to > determine the subobject access path. > > > I think I would still have a warning, since reinterpret_cast is harder to > check statically and therefore is less future-proof. But I could see that > warning being controlled by a separate flag. > > Jordan > >
13824.patch
Description: Binary data
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
