From: Stan Cox Date: Thu, 29 Feb 1996 22:37:10 +0000 (+0000) Subject: (i386_return_pops_args): Cleanup extra argument X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=698cdd84d5f3e7436900fce56844198820c75023;p=gcc.git (i386_return_pops_args): Cleanup extra argument From-SVN: r11389 --- diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 212c67b3aa0..50a8211923d 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -460,31 +460,30 @@ i386_return_pops_args (fundecl, funtype, size) tree fundecl; tree funtype; int size; -{ +{ int rtd = TARGET_RTD; if (TREE_CODE (funtype) == IDENTIFIER_NODE) return 0; - /* Cdecl functions override -mrtd, and never pop the stack */ - if (lookup_attribute ("cdecl", TYPE_ATTRIBUTES (funtype))) + /* Cdecl functions override -mrtd, and never pop the stack */ + if (!lookup_attribute ("cdecl", TYPE_ATTRIBUTES (funtype))) { + + /* Stdcall functions will pop the stack if not variable args */ + if (lookup_attribute ("stdcall", TYPE_ATTRIBUTES (funtype))) + rtd = 1; + + if (rtd + && (TYPE_ARG_TYPES (funtype) == NULL_TREE + || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (funtype))) == void_type_node))) + return size; + } + + /* Lose any fake structure return argument */ + if (aggregate_value_p (TREE_TYPE (funtype))) + return GET_MODE_SIZE (Pmode); + return 0; - - /* Stdcall functions will pop the stack if not variable args */ - if (lookup_attribute ("stdcall", TYPE_ATTRIBUTES (funtype))) - rtd = 1; - - if (rtd) - { - if (TYPE_ARG_TYPES (funtype) == NULL_TREE - || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (funtype))) == void_type_node)) - return size; - - if (aggregate_value_p (TREE_TYPE (funtype))) - return GET_MODE_SIZE (Pmode); - } - - return 0; }