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

Reply via email to