------- Additional Comments From dannysmith at users dot sourceforge dot net 2005-06-12 09:39 ------- Hi,
This is what is says in the comments above i386/i386.c: ix86_return_pop_args: FUNDECL is the declaration node of the function (as a tree), FUNTYPE is the data type of the function (as a tree), or for a library call it is an identifier node for the subroutine name. and indeed , the call to build_decl in init_block_move_fn in expr.c (where the call to "mmecpy" is generated) has an identifier node as the second arg. There appears to be a long-standing thinko in the test for library calls in ix86_return_pops_args. This patch fixes the memcpy call in the testcase on trunk. I'll do a bootstrap and regetest overnight. Could you test on 3.4 branch please. * config/i386/i386 (ix86_return_pops_args): Test the function type, not the decl node, when testing for library call. Index: i386.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.c,v retrieving revision 1.829 diff -c -3 -p -r1.829 i386.c *************** ix86_eax_live_at_start_p (void) *** 1943,1949 **** int ix86_return_pops_args (tree fundecl, tree funtype, int size) { ! int rtd = TARGET_RTD && (!fundecl || TREE_CODE (fundecl) != IDENTIFIER_NODE); /* Cdecl functions override -mrtd, and never pop the stack. */ if (! lookup_attribute ("cdecl", TYPE_ATTRIBUTES (funtype))) { --- 1943,1949 ---- int ix86_return_pops_args (tree fundecl, tree funtype, int size) { ! int rtd = TARGET_RTD && (!funtype || TREE_CODE (funtype) != IDENTIFIER_NODE); /* Cdecl functions override -mrtd, and never pop the stack. */ if (! lookup_attribute ("cdecl", TYPE_ATTRIBUTES (funtype))) { -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22017