[C++-sig] boost/python 1.33.1 breaks aliasing rules

Ralf W. Grosse-Kunstleve rwgk at yahoo.com
Thu Dec 1 18:40:02 CET 2005


--- Philipp Thomas <pth at suse.de> wrote:

> 
> We use a patch for gcc 4.1 that also makes it warn about violations of the
> C/C++ aliasing
> rules in C++ code (stock gcc only warns for C code). For the code in boost
> 1.33.1 I get
> 
> warning: dereferencing type-punned pointer will break strict-aliasing rules
> 
> for the following files:
> 
>  /usr/src/packages/BUILD/boost_1_33_1/libs/python/build/../src/long.cpp:
> 12,19, 26
>  /usr/src/packages/BUILD/boost_1_33_1/libs/python/build/../src/dict.cpp: 32
>  /usr/src/packages/BUILD/boost_1_33_1/libs/python/build/../src/tuple.cpp:12
>  /usr/src/packages/BUILD/boost_1_33_1/libs/python/build/../src/str.cpp: 12

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?

Both types are defined in Python headers. AFAIK the cast above is standard
practice in Python code...

Thank you in advance!

Cheers,
        Ralf



	
		
__________________________________ 
Yahoo! Mail - PC Magazine Editors' Choice 2005 
http://mail.yahoo.com



More information about the Cplusplus-sig mailing list