[Bug c++/56394] pointer arithmetic breaks with __attribute__((packed))

maxim.yegorushkin at gmail dot com gcc-bugzilla@gcc.gnu.org
Tue Feb 19 14:22:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56394

--- Comment #4 from Maxim Yegorushkin <maxim.yegorushkin at gmail dot com> 2013-02-19 14:21:52 UTC ---
(In reply to comment #2)
> (In reply to comment #1)
> > Also reproduces with optimization but with -fno-inline.  The issue must be
> > with the exact division:
> > 
> >   D.2616_5 = end.0_3 - beg.1_4;
> >   D.2617_6 = D.2616_5 /[ex] 12;
> > 
> > the difference is 4088 but that does not divide by 12.  Which means your
> > computed end is not correct (the pointers cannot point to elements of
> > an array of Xyz).
> 
> That is, you probably want
> 
>     template<class T>
>         T* end() {
>             auto e = reinterpret_cast<uintptr_t>(static_cast<char*>(mem) +
> len);
>             return reinterpret_cast<T*>(e - len % sizeof(T));
>         }
> 
> instead.

Is there anything wrong with my original code?

-- Maxim



More information about the Gcc-bugs mailing list