http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36861
--- Comment #41 from rguenther at suse dot de <rguenther at suse dot de> 2011-01-19 16:40:15 UTC --- On Wed, 19 Jan 2011, igaztanaga at gmail dot com wrote: > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36861 > > --- Comment #40 from Ion GaztaƱaga <igaztanaga at gmail dot com> 2011-01-19 > 16:07:01 UTC --- > (In reply to comment #39) > > The point with the case in question is that a pointer to a global > > object is computed relative to the address _of an automatic variable_. > > I hope no standard will ever allow that ;) It might be a simple > > oversight (and thus bug) in Boost AVL though. > > Is not an oversight, it's a basic feature to build easy relative addressing to > be used in shared memory and memory mapped files shared between several > processes. A pointer only stores the distance between the "smart pointer" and > the pointee, so it can be mapped in different addresses in several processes. > Support for automatic storage smart pointers is needed just to support > iterators that could be stored in shared memory (thus, storing smart pointers > in shared memory) and also be used by programmers in a loop (automatic > storage). The case in question seems to use random automatic storage to represent a pointer to unrelated storage. That is never going to work. And if it will ever be required to work all points-to analysis will just be useless which is not something you want. > Until now, this illegal scheme was working in all known compilers (although > outside the standard, I agree). Since the standard does not support shared > memory, if someday shared memory support is added to the standard, it will > surely require some changes to support this widely used relative addressing. > Until then, I agree, this bug report is invalid. > > The only issue I would like to know is if this relative addressing scheme for > automatic variables can be used with GCC with some kind of existing > annotation, > anything that could force that automatic variable to have an address that > could > be used to point to shared memory elements. No, there is no way to do that. Sorry, but you really have to re-design this thing to be standard conformant. Richard.