[llvm-bugs] [Bug 33075] Assignment to struct passed by value modifies caller's stack frame
via llvm-bugs
llvm-bugs at lists.llvm.org
Wed May 17 10:38:05 PDT 2017
https://bugs.llvm.org/show_bug.cgi?id=33075
Reid Kleckner <rnk at google.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |rnk at google.com
Status|NEW |RESOLVED
Resolution|--- |INVALID
--- Comment #1 from Reid Kleckner <rnk at google.com> ---
This is correct behavior. The caller should not expect arguments passed in
memory to retain their original values, just as it would not expect the
argument registers to be preserved.
GCC does the same thing:
https://godbolt.org/g/vZybVN
I had to modify the example to escape 's' to preserve the dead store of 666.
ABIs have been this way forever. Legacy ABIs (32-bit x86) pass all arguments in
memory, and for those ABIs, compilers typically store to argument memory at
-O0. They don't do a copy.
Consider:
$ echo 'void f(int a) { ++a; }' | gcc -x c - -m32 -S -o -
.file ""
.text
.globl _f
.def _f; .scl 2; .type 32; .endef
_f:
pushl %ebp
movl %esp, %ebp
addl $1, 8(%ebp)
nop
popl %ebp
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20170517/99b7344c/attachment.html>
More information about the llvm-bugs
mailing list