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