Boost logo

Boost Users :

From: Ion Gaztañaga (igaztanaga_at_[hidden])
Date: 2007-06-04 15:01:07


Boris Gubenko wrote:
> Ion Gaztanaga wrote:
>> P.S.: I'm not sure if EDG-based compilers and HP compiler work because I
>> don't have such compilers. If someone wants to help on those, I would be
>> glad.
>
> Below are the results on HP-UX/ia64 in 32- and 64-bit pointer mode using
> the program posted by Zeljko Vrba.
>
> The compiler on HP-UX/ia64 is EDG-based so checking both __HP_aCC and
> __EDG_VERSION__ in boost/intrusive/detail/parent_from_member.hpp is
> reduntant.
>
> bash-2.03$ aCC -V
> aCC: HP C/aC++ B3910B A.06.14 [Feb 22 2007]
> bash-2.03$ aCC -I./boost -DNN=10 x.cpp && a.out
> 4 44
> bash-2.03$ aCC -I./boost -DNN=20 x.cpp && a.out
> 4 84
> bash-2.03$ aCC -I./boost -DNN=10 +DD64 x.cpp && a.out
> 8 88
> bash-2.03$ aCC -I./boost -DNN=20 +DD64 x.cpp && a.out
> 8 168
> bash-2.03$

So it seems that the compiler aligns the hook to 4 bytes:

void *data_[NN]; //4*NN bytes
char ch_; //1 byte plus alignment

so the trick used to extract the offset in parent_from_member function
is adequate. But the regression tests for Intrusive with HP aCC:

http://engineering.meta-comm.com/boost-regression/CVS-HEAD/developer/intrusive.html

seems to fail in tests using member hooks. A bit strange. Can you check
the real distance between members with something like:

int main(void)
{
      using std::cout;
      using std::endl;
      klass k;
      cout << ((char*)k.hook_ - (char*)k) << endl;
      return 0;
}

If the distance is equal to the raw values extracted from the pointer to
data member, then regression test failures might be provoked by another
library bug.

Regards,

Ion


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net