https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70871
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2016-04-29
Ever confirmed|0 |1
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Assembler w/o asan:
somefunc:
.LFB0:
.cfi_startproc
subq $24, %rsp
.cfi_def_cfa_offset 32
movq $0, 8(%rsp)
leaq 8(%rsp), %rdi
call call
movabsq $280379743272960, %rdx
movq 8(%rsp), %rax
testq %rdx, 40(%rax)
setne %al
movzbl %al, %eax
addq $24, %rsp
.cfi_def_cfa_offset 8
ret
if my math is correct this loads 8 bytes from &px->i and accesses two stray
bytes after the object. That's actually fine as alignment guarantees of
the type ensure this won't cross a page boundary. If we misalign it by
making it packed the folding doesn't apply.
So while the folding is strange it isn't incorrect but it messes with ASAN.