[Bug c++/56394] pointer arithmetic breaks with __attribute__((packed))
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Feb 19 14:18:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56394
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> 2013-02-19 14:17:16 UTC ---
(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.
More information about the Gcc-bugs
mailing list