------- Comment #14 from rguenth at gcc dot gnu dot org 2008-01-03 17:06 ------- With optimization we now avoid the error, but unoptimized code is still wrong:
_Z10InitializeP16SQLU_DICT_INFO_0: .LFB3: pushq %rbp .LCFI2: movq %rsp, %rbp .LCFI3: pushq %rbx .LCFI4: subq $8, %rsp .LCFI5: movq %rdi, -16(%rbp) movq -16(%rbp), %rax movb $0, 8(%rax) movq -16(%rbp), %rax movb $0, 9(%rax) movq -16(%rbp), %rbx call _Z17INIT_6_BYTES_ZEROv movzbl %al, %ecx movzbl 10(%rbx), %edx andl $0, %edx orl %ecx, %edx movb %dl, 10(%rbx) movzbl %ah, %edx mov %edx, %ecx movq 10(%rbx), %rdx ^^^^^^^^^^^^^ here movb %cl, %dh movq %rdx, 10(%rbx) ^^^^^^^^^^^^^ and here movq %rax, %rdx shrq $16, %rdx movzbq %dl,%rcx movzbl 12(%rbx), %edx andl $0, %edx orl %ecx, %edx movb %dl, 12(%rbx) movq %rax, %rdx shrq $24, %rdx movzbq %dl,%rcx movzbl 13(%rbx), %edx andl $0, %edx orl %ecx, %edx movb %dl, 13(%rbx) movq %rax, %rdx shrq $32, %rdx movzbq %dl,%rcx movzbl 14(%rbx), %edx andl $0, %edx orl %ecx, %edx movb %dl, 14(%rbx) shrq $40, %rax movzbq %al,%rdx movzbl 15(%rbx), %eax andl $0, %eax orl %edx, %eax movb %al, 15(%rbx) addq $8, %rsp popq %rbx leave ret without inlining we do optimize this to _Z10InitializeP16SQLU_DICT_INFO_0: .LFB3: pushq %rbx .LCFI0: movq %rdi, %rbx movb $0, 8(%rdi) movb $0, 9(%rdi) call _Z17INIT_6_BYTES_ZEROv movb %al, 10(%rbx) movzbl %ah, %edx movb %dl, 11(%rbx) movq %rax, %rdx shrq $16, %rdx movb %dl, 12(%rbx) movq %rax, %rdx shrq $24, %rdx movb %dl, 13(%rbx) movq %rax, %rdx shrq $32, %rdx movb %dl, 14(%rbx) shrq $40, %rax movb %al, 15(%rbx) popq %rbx ret which doesn't have the 8 byte move any more. 4.2, even when optimizing retains the 8 byte move. -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed|2007-03-22 10:03:14 |2008-01-03 17:06:20 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31309