Hi,
Can someone explain me why the following line of code does not compile
the same way on g++ 3.4.6 and g++ 4.1.1 in 64 bits:
(char*&)p += sizeof(A);
AND
p = reinterpret_cast<A*>(reinterpret_cast<char*>(p) + sizeof(A));

in the following context:
struct A {double c[4];};
A* p = reinterpret_cast<A*>(new char[sizeof(A)*2]);
// LINE
p->c[2] = 12.0;

GCC4/64
With first line
main:
.LFB2:
        subq    $24, %rsp
.LCFI0:
        movl    $64, %edi
        call    _Znam
        movabsq $4622945017495814144, %rdx
        movq    %rdx, 16(%rax)
        xorl    %eax, %eax
        addq    $24, %rsp
        ret

With second line
main:
.LFB2:
        subq    $8, %rsp
.LCFI0:
        movl    $64, %edi
        call    _Znam
        movabsq $4622945017495814144, %rdx
        movq    %rdx, 48(%rax)
        xorl    %eax, %eax
        addq    $8, %rsp
        ret


GCC3.4/64
main:
.LFB2:
        subq    $8, %rsp
.LCFI0:
        movl    $64, %edi
        call    _Znam
        movabsq $4623507967449235456, %rdx
        movq    %rdx, 48(%rax)
        xorl    %eax, %eax
        addq    $8, %rsp
        ret

_______________________________________________
help-gplusplus mailing list
help-gplusplus@gnu.org
http://lists.gnu.org/mailman/listinfo/help-gplusplus

Reply via email to