[C++-sig] boost/python 1.33.1 breaks aliasing rules
Philipp Thomas
pth at suse.de
Mon Dec 5 12:07:23 CET 2005
* Ralf W. Grosse-Kunstleve (rwgk at yahoo.com) [20051201 18:42]:
>
> Thanks for pointing out the aliasing problems! Could you help us understanding
> how the problem could be fixed? E.g., this is the code in str.cpp:
>
> return (detail::new_reference)PyObject_CallFunction(
> (PyObject*)&PyString_Type, "(O)",
> arg_.ptr());
>
> Line 12 is (PyObject*)&PyString_Type. Is this what we have to look at?
Yes, the cast is what triggers the warning. C aliasing rules say, that
basically an object may only be accessed by a pointer of the same type. Only
char or void pointers may point to anything. These rules also apply to C++,
of cause expanded by the needs of C++.
AFAICS, PyObject and PyString_Type aren't related types, i.e. somehow
derived from one another.
> Both types are defined in Python headers. AFAIK the cast above is standard
> practice in Python code...
Yes, that's because up until now no compiler complained.
Philipp
More information about the Cplusplus-sig
mailing list