[C++-sig] boost::python with virtual inheritance and g++ c++0x/11 (testcase attached)
Gabe Rives-Corbett
gabe at gaberivescorbett.com
Tue May 22 18:07:28 CEST 2012
When I had this problem I had not built BPL using C++11, how would I instruct bjam to use gcc at a specific location and with the -std=c++0x flag?
--
Gabe Rives-Corbett
Cell: (805) 570-8395
On Tuesday, May 22, 2012 at 10:43 AM, Niall Douglas wrote:
> On 21 May 2012 at 18:43, Jonas Wielicki wrote:
>
> > On 21.05.2012 17:55, Niall Douglas wrote:
> > > 1. Does the bug occur in non-optimised as well as optimised builds?
> >
> > It does.
> >
>
>
> Joy.
>
> > > 2. Does the bug occur when C++11 is turned off?
> > It does not.
> >
>
>
> Not so much joy. It could, technically speaking, be a
> misinterpretation of C++03 by either BPL or GCC. Still, at least it
> narrows things down.
>
> > > 5. Are you using precompiled headers? If so, does the bug occur when
> > > you turn those off?
> > >
> >
> > I think I am not. I would know if I did, wouldn't I? At least I can
> > browse through the header sources at /usr/include/boost/..
> >
>
>
> Precompiled headers on GCC are basically a dump of state just after
> processing the headers. As a result, the file is huge. That might
> help you find out if they're on. I believe bjam defaults them to off.
>
> > > 6. Can you spot where in the assembly it's making a pointer
> > > dereferencing mistake?
> > >
> >
> > That is in the template, but the pointer value changes inside code which
> > is compiled in the boost library.
> >
>
>
> Are you saying that the *offset* changes inside the code?
>
> So, class A has vtable at this[-8].
>
> I access a->foo() which indexes this[-8] by 0x16 in the headers.
>
> But inside the compiland, a->foo() indexes this[-8] by 0x20, which is
> wrong.
>
> > Within the function defined around inheritance.cpp:392, the value of the
> > object pointer (I think it's called p) changes. I was yet unable to find
> > the specific point where the value is changed, because a lot of
> > subfunctions get called in there and, to be honest, I'm not that
> > familiar with gcc yet. Also it seems as maybe the wrong value is only
> > passed, while it is still intact on stack (gcc at least shows me
> > differing values for the two stackframes), but that might be due to
> > debug data or gcc magic?
> >
>
>
> Yeah the GCC ABI is a bit fusty. Got a lot better in 3.2 onwards
> though. You might find
> http://sourcery.mentor.com/public/cxx-abi/cxx-vtable-ex.html useful
> as a reference for the C++03 ABI.
>
> Of course, almost certainly the bug you're seeing is related to the
> ABI changes they're making for C++11, of which there are quite a few.
> If I had to take a guess, your problems might have something to do
> with fixing bugs in decltype support e.g. one of the changelog items
> in 4.7 is "The representation of C++ virtual thunks and aliases (both
> implicit and defined via the alias attribute) has been re-engineered.
> Aliases no longer pose optimization barriers and calls to an alias
> can be inlined and otherwise optimized."
>
> BTW - can I just clarify you ARE compiling the entire of BPL using
> C++11 throughout? Linking C++11 to C++03 is *supposed* to work (but
> not the other way round), but I can see nests of vipers in it.
>
> > > If you're *really* unlucky, the bug is that different assembler is
> > > being generated in different compilands and the fact you're seeing a
> > > problem is due to sheer chance because of the stochastic choice the
> > > linker made :)
> > >
> >
> > Actually, the problem is deterministic. I compiled the binary many times
> > now and with gcc 4.7 I always get the segfault, at the same instruction,
> > with the same surroundings (changed pointer value from one stack frame
> > to the other).
> >
>
>
> Given the information so far, you have an excellent chance of getting
> it fixed.
>
> Another thought - I once persuaded the GCC devs to accept a bug when
> I demonstrated that ICC (Intel's compiler) got it right. ICC is free
> on Linux, so that might be worth a shot too.
>
> Niall
>
> --
> Technology & Consulting Services - ned Productions Limited.
> http://www.nedproductions.biz/. VAT reg: IE 9708311Q.
> Work Portfolio: http://careers.stackoverflow.com/nialldouglas/
>
>
>
> _______________________________________________
> Cplusplus-sig mailing list
> Cplusplus-sig at python.org (mailto:Cplusplus-sig at python.org)
> http://mail.python.org/mailman/listinfo/cplusplus-sig
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20120522/751b892d/attachment-0001.html>
More information about the Cplusplus-sig
mailing list