------- Comment #9 from pinskia at gcc dot gnu dot org 2005-11-21 15:35 ------- Here is the rtl which is produced by expanding foo(x): (insn 15 13 16 (set (reg/f:DI 63) (symbol_ref:DI ("x") <var_decl 0x2aaaab15eb00 x>)) -1 (nil) (nil))
(insn 16 15 17 (set (reg:DI 62) (mem/s/c:DI (reg/f:DI 63) [4 x+0 S8 A32])) -1 (nil) (nil)) (insn 17 16 18 (set (reg:DI 5 di) (reg:DI 62)) -1 (nil) (nil)) (call_insn 18 17 0 (call (mem:QI (symbol_ref:DI ("foo") [flags 0x3] <function_decl 0x2aaaab15fb00 foo>) [0 S1 A8]) (const_int 0 [0x0])) -1 (nil) (expr_list:REG_EH_REGION (const_int 0 [0x0]) (nil)) (expr_list:REG_DEP_TRUE (use (reg:DI 5 di)) (nil))) Obviously this is wrong as it only passes one half of the struct. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24969