varargs.h: Replace with stub which issues #error.
* ginclude/varargs.h: Replace with stub which issues #error. * ginclude/stdarg.h: __builtin_stdarg_start is renamed __builtin_va_start. * builtins.def (BUILT_IN_VARARGS_START): Delete. (BUILT_IN_VA_START): New. * builtins.c (expand_builtin_va_start): Eliminate first argument and code to implement pre-ISO varargs. (std_expand_builtin_va_start): Ignore first argument; it is always 1. (expand_builtin): Handle BUILT_IN_VA_START and BUILT_IN_STDARG_START identically. Delete BUILT_IN_VARARGS_START case. * function.c (assign_parms): Delete hide_last_arg and all its uses. (mark_varargs): Delete function. * function.h (struct function): Delete 'varargs' bit. (current_function_varargs): Delete macro. * tree.h: Don't declare mark_varargs. * c-decl.c (c_function_varargs, c_mark_varargs): Delete. (c_expand_body): Don't call mark_varargs. * c-objc-common.c: Handle BUILT_IN_VA_START and BUILT_IN_STDARG_START identically. Delete BUILT_IN_VARARGS_START case. * c-tree.h: Don't declare c_mark_varargs. * c-parse.in: Remove grammar rules for '&...' (which has been commented out since before 2.7.2) and for '...' in K+R argument declarations. * builtins.c, function.c, integrate.c, sibcall.c, config/alpha/unicosmk.h, config/arc/arc.c, config/arc/arc.h, config/avr/avr.c, config/cris/cris.c, config/fr30/fr30.c, config/i960/i960.c, config/i960/i960.md, config/m32r/m32r.c, config/m32r/m32r.h, config/m88k/m88k.c, config/m88k/m88k.h, config/mips/mips.c, config/mmix/mmix.c, config/mmix/mmix.h, config/mn10300/mn10300.c, config/pa/som.h, config/s390/s390.c, config/sh/sh.c, config/sh/sh.h, config/sparc/sparc.h, config/stormy16/stormy16.c: Delete all references to current_function_varargs, and code predicated on that flag. * config/alpha/alpha.c (alpha_va_start), config/arc/arc.c (arc_va_start), config/i386/i386.c (ix86_va_start), config/mips/mips.c (mips_va_start), config/mn10300/mn10300.c (mn10300_va_start), config/rs6000/rs6000.c (rs6000_va_start), config/s390/s390.c (s390_va_start), config/sh/sh.c (sh_va_start), Ignore first argument; it is always 1. * config/c4x/c4x-protos.h, config/c4x/c4x.c: Delete c4x_va_start. * config/ia64/ia64-protos.h, config/ia64/ia64.c: Delete ia64_va_start. * config/m68hc11/m68hc11-protos.h, config/m68hc11/m68hc11.c: Delete m68hc11_va_start. * config/c4x/c4x.h, config/ia64/ia64.h, config/m68hc11/m68hc11.h: No need to define EXPAND_BUILTIN_VA_START. * doc/invoke.texi, doc/sourcebuild.texi, doc/tm.texi, doc/trouble.texi: Remove references to GCC-provided <varargs.h>. testsuite: * c-torture/execute/991216-3.c, c-torture/execute/strct-varg-1.c, c-torture/execute/va-arg-7.c, c-torture/execute/va-arg-8.c, c-torture/execute/va-arg-15.c, c-torture/execute/va-arg-16.c, c-torture/execute/va-arg-17.c, c-torture/execute/va-arg-19.c: Convert to use <stdarg.h>. * c-torture/execute/va-arg-3.c, c-torture/execute/va-arg-3.x: Delete. * gcc.dg/va-arg-2.c: New. * lib/gcc.exp, lib/objc.exp: Remove code to set -DNO_VARARGS. From-SVN: r55472
This commit is contained in:
parent
5068f54685
commit
6c535c69ee
140
gcc/ChangeLog
140
gcc/ChangeLog
|
@ -1,3 +1,67 @@
|
|||
2002-07-15 Zack Weinberg <zack@codesourcery.com>
|
||||
|
||||
* ginclude/varargs.h: Replace with stub which issues #error.
|
||||
* ginclude/stdarg.h: __builtin_stdarg_start is renamed
|
||||
__builtin_va_start.
|
||||
|
||||
* builtins.def (BUILT_IN_VARARGS_START): Delete.
|
||||
(BUILT_IN_VA_START): New.
|
||||
* builtins.c (expand_builtin_va_start): Eliminate first
|
||||
argument and code to implement pre-ISO varargs.
|
||||
(std_expand_builtin_va_start): Ignore first argument; it is
|
||||
always 1.
|
||||
(expand_builtin): Handle BUILT_IN_VA_START and
|
||||
BUILT_IN_STDARG_START identically. Delete
|
||||
BUILT_IN_VARARGS_START case.
|
||||
|
||||
* function.c (assign_parms): Delete hide_last_arg and all
|
||||
its uses.
|
||||
(mark_varargs): Delete function.
|
||||
* function.h (struct function): Delete 'varargs' bit.
|
||||
(current_function_varargs): Delete macro.
|
||||
* tree.h: Don't declare mark_varargs.
|
||||
|
||||
* c-decl.c (c_function_varargs, c_mark_varargs): Delete.
|
||||
(c_expand_body): Don't call mark_varargs.
|
||||
* c-objc-common.c: Handle BUILT_IN_VA_START and
|
||||
BUILT_IN_STDARG_START identically. Delete
|
||||
BUILT_IN_VARARGS_START case.
|
||||
* c-tree.h: Don't declare c_mark_varargs.
|
||||
* c-parse.in: Remove grammar rules for '&...' (which has been
|
||||
commented out since before 2.7.2) and for '...' in K+R
|
||||
argument declarations.
|
||||
|
||||
* builtins.c, function.c, integrate.c, sibcall.c,
|
||||
config/alpha/unicosmk.h, config/arc/arc.c, config/arc/arc.h,
|
||||
config/avr/avr.c, config/cris/cris.c, config/fr30/fr30.c,
|
||||
config/i960/i960.c, config/i960/i960.md, config/m32r/m32r.c,
|
||||
config/m32r/m32r.h, config/m88k/m88k.c, config/m88k/m88k.h,
|
||||
config/mips/mips.c, config/mmix/mmix.c, config/mmix/mmix.h,
|
||||
config/mn10300/mn10300.c, config/pa/som.h, config/s390/s390.c,
|
||||
config/sh/sh.c, config/sh/sh.h, config/sparc/sparc.h,
|
||||
config/stormy16/stormy16.c: Delete all references to
|
||||
current_function_varargs, and code predicated on that flag.
|
||||
|
||||
* config/alpha/alpha.c (alpha_va_start),
|
||||
config/arc/arc.c (arc_va_start),
|
||||
config/i386/i386.c (ix86_va_start),
|
||||
config/mips/mips.c (mips_va_start),
|
||||
config/mn10300/mn10300.c (mn10300_va_start),
|
||||
config/rs6000/rs6000.c (rs6000_va_start),
|
||||
config/s390/s390.c (s390_va_start),
|
||||
config/sh/sh.c (sh_va_start),
|
||||
Ignore first argument; it is always 1.
|
||||
|
||||
* config/c4x/c4x-protos.h, config/c4x/c4x.c: Delete c4x_va_start.
|
||||
* config/ia64/ia64-protos.h, config/ia64/ia64.c: Delete ia64_va_start.
|
||||
* config/m68hc11/m68hc11-protos.h, config/m68hc11/m68hc11.c:
|
||||
Delete m68hc11_va_start.
|
||||
* config/c4x/c4x.h, config/ia64/ia64.h, config/m68hc11/m68hc11.h:
|
||||
No need to define EXPAND_BUILTIN_VA_START.
|
||||
|
||||
* doc/invoke.texi, doc/sourcebuild.texi, doc/tm.texi,
|
||||
doc/trouble.texi: Remove references to GCC-provided <varargs.h>.
|
||||
|
||||
2002-07-15 Eric Botcazou <ebotcazou@multimania.com>
|
||||
|
||||
PR optimization/7153
|
||||
|
@ -9,7 +73,7 @@
|
|||
* config/sparc/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Remove.
|
||||
|
||||
2002-07-15 Michael Matz <matz@suse.de>,
|
||||
Daniel Berlin <dberlin@dberlin.org>,
|
||||
Daniel Berlin <dberlin@dberlin.org>,
|
||||
Denis Chertykov <denisc@overta.ru>
|
||||
|
||||
Add a new register allocator.
|
||||
|
@ -298,10 +362,10 @@ Thu Jul 11 11:31:12 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
|
||||
2002-07-10 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.c (emit_frame_save): New.
|
||||
(rs6000_frame_related): Replace reg2 before reg.
|
||||
(rs6000_emit_prologue): Use emit_frame_save for saving gprs, fprs,
|
||||
and eh_return registers.
|
||||
* config/rs6000/rs6000.c (emit_frame_save): New.
|
||||
(rs6000_frame_related): Replace reg2 before reg.
|
||||
(rs6000_emit_prologue): Use emit_frame_save for saving gprs, fprs,
|
||||
and eh_return registers.
|
||||
|
||||
2002-07-10 Toon Moene <toon@moene.indiv.nluug.nl>
|
||||
|
||||
|
@ -351,8 +415,8 @@ Wed Jul 10 18:48:55 CEST 2002 Jan Hubicka <jh@suse.cz>
|
|||
* mn10200.c (expand_prologue): Create REG_MAYBE_DEAD notes
|
||||
as appropriate.
|
||||
|
||||
* mn10200.c (expand_epilogue): Fix test to determine which scratch
|
||||
register to use.
|
||||
* mn10200.c (expand_epilogue): Fix test to determine which scratch
|
||||
register to use.
|
||||
|
||||
Wed Jul 10 16:06:00 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||
|
||||
|
@ -412,7 +476,7 @@ Wed Jul 10 16:06:00 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
* doc/cpp.texi: Update.
|
||||
|
||||
Tue Jul 9 22:37:44 2002 Stephen Clarke <stephen.clarke@superh.com>
|
||||
J"orn Rennecke <joern.rennecke@superh.com>
|
||||
J"orn Rennecke <joern.rennecke@superh.com>
|
||||
|
||||
* sh.c (sh_adjust_cost): Special handling of SHMEDIA code.
|
||||
* sh.md (attribute issues): Replace with:
|
||||
|
@ -971,8 +1035,8 @@ Mon Jul 1 19:55:17 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
|
||||
2002-07-01 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* tree.c (build_function_type_list): Update function comment.
|
||||
Rename first argument to return_type.
|
||||
* tree.c (build_function_type_list): Update function comment.
|
||||
Rename first argument to return_type.
|
||||
|
||||
2002-07-01 Neil Booth <neil@daikokuya.co.uk>
|
||||
|
||||
|
@ -994,7 +1058,7 @@ Mon Jul 1 19:55:17 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
|
||||
Fri Jun 28 17:22:37 2002 Denis Chertykov <denisc@overta.ru>
|
||||
Frank Ch. Eigler <fche@redhat.com>
|
||||
Matthew Green <mrg@redhat.com>
|
||||
Matthew Green <mrg@redhat.com>
|
||||
Richard Henderson <rtl@redhat.com>
|
||||
Dave Hudson <dave.hudson@ubicom.com>
|
||||
Jeff Johnston <jjohnstn@redhat.com>
|
||||
|
@ -1037,7 +1101,7 @@ Fri Jun 28 17:22:37 2002 Denis Chertykov <denisc@overta.ru>
|
|||
|
||||
2002-06-30 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* config/i386/i386.c (ix86_init_mmx_sse_builtins): Fix typos.
|
||||
* config/i386/i386.c (ix86_init_mmx_sse_builtins): Fix typos.
|
||||
|
||||
2002-06-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
|
@ -1055,20 +1119,20 @@ Fri Jun 28 17:22:37 2002 Denis Chertykov <denisc@overta.ru>
|
|||
|
||||
2002-06-29 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* config/i386/i386.c (ix86_init_mmx_sse_builtins): Use
|
||||
build_function_type_list instead of build_function_type.
|
||||
* config/i386/i386.c (ix86_init_mmx_sse_builtins): Use
|
||||
build_function_type_list instead of build_function_type.
|
||||
|
||||
* config/ia64/ia64.c (ia64_init_builtins): Same.
|
||||
* config/ia64/ia64.c (ia64_init_builtins): Same.
|
||||
|
||||
* config/alpha/alpha.c (alpha_init_builtins): Same.
|
||||
* config/alpha/alpha.c (alpha_init_builtins): Same.
|
||||
|
||||
* config/rs6000/rs6000.c (altivec_init_builtins): Same.
|
||||
* config/rs6000/rs6000.c (altivec_init_builtins): Same.
|
||||
|
||||
* config/arm/arm.c (arm_init_builtins): Same.
|
||||
* config/arm/arm.c (arm_init_builtins): Same.
|
||||
|
||||
* tree.h: Add build_function_type_list prototype.
|
||||
* tree.h: Add build_function_type_list prototype.
|
||||
|
||||
* tree.c (build_function_type_list): New.
|
||||
* tree.c (build_function_type_list): New.
|
||||
|
||||
2002-06-29 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
|
@ -1076,7 +1140,7 @@ Fri Jun 28 17:22:37 2002 Denis Chertykov <denisc@overta.ru>
|
|||
|
||||
2002-06-28 Aaron Lehmann <aaronl@vitelus.com>
|
||||
|
||||
* fold-cont.c: Remove unused CHARMASK.
|
||||
* fold-cont.c: Remove unused CHARMASK.
|
||||
|
||||
2002-06-29 Neil Booth <neil@daikokuya.co.uk>
|
||||
|
||||
|
@ -1098,7 +1162,7 @@ Fri Jun 28 17:22:37 2002 Denis Chertykov <denisc@overta.ru>
|
|||
|
||||
2002-06-29 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
|
||||
|
||||
* c4x.h: (TARGET_CPU_CPP_BUILTINS): Check flag_inline_functions and
|
||||
* c4x.h: (TARGET_CPU_CPP_BUILTINS): Check flag_inline_functions and
|
||||
flag_inline_trees to enable inlining.
|
||||
|
||||
2002-06-28 Phil Edwards <pme@gcc.gnu.org>
|
||||
|
@ -1155,22 +1219,22 @@ Fri Jun 28 17:22:37 2002 Denis Chertykov <denisc@overta.ru>
|
|||
|
||||
2002-06-28 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.c: Remove unusued variables from last
|
||||
patch.
|
||||
* config/rs6000/rs6000.c: Remove unusued variables from last
|
||||
patch.
|
||||
|
||||
2002-06-27 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
Revert:
|
||||
* config/rs6000/rs6000.c (rs6000_override_options): Move
|
||||
*SUBTARGET_OVERRIDE_OPTIONS before the -m options.
|
||||
* config/rs6000/rs6000.c (rs6000_override_options): Move
|
||||
*SUBTARGET_OVERRIDE_OPTIONS before the -m options.
|
||||
|
||||
2002-06-27 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.c (altivec_expand_builtin): Move
|
||||
lvx/stv/dst builtins...
|
||||
(altivec_expand_ld_builtin): ...to here.
|
||||
(altivec_expand_st_builtin): ...here.
|
||||
(altivec_expand_dst_builtin): ...and here (respectively).
|
||||
* config/rs6000/rs6000.c (altivec_expand_builtin): Move
|
||||
lvx/stv/dst builtins...
|
||||
(altivec_expand_ld_builtin): ...to here.
|
||||
(altivec_expand_st_builtin): ...here.
|
||||
(altivec_expand_dst_builtin): ...and here (respectively).
|
||||
|
||||
2002-06-28 Bob Wilson <bob.wilson@acm.org>
|
||||
|
||||
|
@ -1192,8 +1256,8 @@ Fri Jun 28 17:22:37 2002 Denis Chertykov <denisc@overta.ru>
|
|||
|
||||
2002-06-27 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_override_options): Move
|
||||
*SUBTARGET_OVERRIDE_OPTIONS before the -m options.
|
||||
* config/rs6000/rs6000.c (rs6000_override_options): Move
|
||||
*SUBTARGET_OVERRIDE_OPTIONS before the -m options.
|
||||
|
||||
2002-06-27 Bob Wilson <bob.wilson@acm.org>
|
||||
|
||||
|
@ -1268,8 +1332,8 @@ Wed Jun 26 16:32:57 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
|
||||
2002-06-26 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.h (ALTIVEC_VECTOR_MODE): Revert change to
|
||||
check for TARGET_ALTIVEC.
|
||||
* config/rs6000/rs6000.h (ALTIVEC_VECTOR_MODE): Revert change to
|
||||
check for TARGET_ALTIVEC.
|
||||
|
||||
2002-06-26 Nathanael Nerode <neroden@gcc.gnu.org>
|
||||
|
||||
|
@ -1290,8 +1354,8 @@ Wed Jun 26 16:32:57 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
|
||||
2002-06-25 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* doc/extend.texi (PowerPC AltiVec Built-in Functions): Document
|
||||
discrepancies from motorola's documentation.
|
||||
* doc/extend.texi (PowerPC AltiVec Built-in Functions): Document
|
||||
discrepancies from motorola's documentation.
|
||||
|
||||
Tue Jun 25 21:51:13 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||
|
||||
|
@ -1768,7 +1832,7 @@ Thu Jun 20 12:14:01 CEST 2002 Jan Hubicka <jh@suse.cz>
|
|||
|
||||
2002-06-19 Chris Demetriou <cgd@broadcom.com>
|
||||
|
||||
* config/mips/mips.c (mips_emit_prefetch): Use hints which
|
||||
* config/mips/mips.c (mips_emit_prefetch): Use hints which
|
||||
match desired locality.
|
||||
|
||||
2002-06-19 Dhananjay R. Deshpande <dhananjayd@kpit.com>
|
||||
|
|
|
@ -98,7 +98,7 @@ static rtx expand_builtin_mathfn PARAMS ((tree, rtx, rtx));
|
|||
static rtx expand_builtin_constant_p PARAMS ((tree));
|
||||
static rtx expand_builtin_args_info PARAMS ((tree));
|
||||
static rtx expand_builtin_next_arg PARAMS ((tree));
|
||||
static rtx expand_builtin_va_start PARAMS ((int, tree));
|
||||
static rtx expand_builtin_va_start PARAMS ((tree));
|
||||
static rtx expand_builtin_va_end PARAMS ((tree));
|
||||
static rtx expand_builtin_va_copy PARAMS ((tree));
|
||||
static rtx expand_builtin_memcmp PARAMS ((tree, tree, rtx,
|
||||
|
@ -2900,10 +2900,9 @@ expand_builtin_next_arg (arglist)
|
|||
{
|
||||
tree fntype = TREE_TYPE (current_function_decl);
|
||||
|
||||
if ((TYPE_ARG_TYPES (fntype) == 0
|
||||
|| (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
|
||||
== void_type_node))
|
||||
&& ! current_function_varargs)
|
||||
if (TYPE_ARG_TYPES (fntype) == 0
|
||||
|| (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
|
||||
== void_type_node))
|
||||
{
|
||||
error ("`va_start' used in function with fixed args");
|
||||
return const0_rtx;
|
||||
|
@ -2926,7 +2925,7 @@ expand_builtin_next_arg (arglist)
|
|||
if (arg != last_parm)
|
||||
warning ("second parameter of `va_start' not last named argument");
|
||||
}
|
||||
else if (! current_function_varargs)
|
||||
else
|
||||
/* Evidently an out of date version of <stdarg.h>; can't validate
|
||||
va_start's second argument, but can still work as intended. */
|
||||
warning ("`__builtin_next_arg' called without an argument");
|
||||
|
@ -2991,24 +2990,12 @@ stabilize_va_list (valist, needs_lvalue)
|
|||
|
||||
void
|
||||
std_expand_builtin_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p;
|
||||
int stdarg_p ATTRIBUTE_UNUSED;
|
||||
tree valist;
|
||||
rtx nextarg;
|
||||
{
|
||||
tree t;
|
||||
|
||||
if (! stdarg_p)
|
||||
{
|
||||
/* The dummy named parameter is declared as a 'word' sized
|
||||
object, but if a 'word' is smaller than an 'int', it would
|
||||
have been promoted to int when it was added to the arglist. */
|
||||
int align = PARM_BOUNDARY / BITS_PER_UNIT;
|
||||
int size = MAX (UNITS_PER_WORD,
|
||||
GET_MODE_SIZE (TYPE_MODE (integer_type_node)));
|
||||
int offset = ((size + align - 1) / align) * align;
|
||||
nextarg = plus_constant (nextarg, -offset);
|
||||
}
|
||||
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (valist), valist,
|
||||
make_tree (ptr_type_node, nextarg));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
|
@ -3016,31 +3003,27 @@ std_expand_builtin_va_start (stdarg_p, valist, nextarg)
|
|||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
||||
/* Expand ARGLIST, which from a call to __builtin_stdarg_va_start or
|
||||
__builtin_varargs_va_start, depending on STDARG_P. */
|
||||
/* Expand ARGLIST, from a call to __builtin_va_start. */
|
||||
|
||||
static rtx
|
||||
expand_builtin_va_start (stdarg_p, arglist)
|
||||
int stdarg_p;
|
||||
expand_builtin_va_start (arglist)
|
||||
tree arglist;
|
||||
{
|
||||
rtx nextarg;
|
||||
tree chain = arglist, valist;
|
||||
tree chain, valist;
|
||||
|
||||
if (stdarg_p)
|
||||
nextarg = expand_builtin_next_arg (chain = TREE_CHAIN (arglist));
|
||||
else
|
||||
nextarg = expand_builtin_next_arg (NULL_TREE);
|
||||
chain = TREE_CHAIN (arglist);
|
||||
|
||||
if (TREE_CHAIN (chain))
|
||||
error ("too many arguments to function `va_start'");
|
||||
|
||||
nextarg = expand_builtin_next_arg (chain);
|
||||
valist = stabilize_va_list (TREE_VALUE (arglist), 1);
|
||||
|
||||
#ifdef EXPAND_BUILTIN_VA_START
|
||||
EXPAND_BUILTIN_VA_START (stdarg_p, valist, nextarg);
|
||||
EXPAND_BUILTIN_VA_START (1, valist, nextarg);
|
||||
#else
|
||||
std_expand_builtin_va_start (stdarg_p, valist, nextarg);
|
||||
std_expand_builtin_va_start (1, valist, nextarg);
|
||||
#endif
|
||||
|
||||
return const0_rtx;
|
||||
|
@ -4030,10 +4013,9 @@ expand_builtin (exp, target, subtarget, mode, ignore)
|
|||
case BUILT_IN_EH_RETURN_DATA_REGNO:
|
||||
return expand_builtin_eh_return_data_regno (arglist);
|
||||
#endif
|
||||
case BUILT_IN_VARARGS_START:
|
||||
return expand_builtin_va_start (0, arglist);
|
||||
case BUILT_IN_VA_START:
|
||||
case BUILT_IN_STDARG_START:
|
||||
return expand_builtin_va_start (1, arglist);
|
||||
return expand_builtin_va_start (arglist);
|
||||
case BUILT_IN_VA_END:
|
||||
return expand_builtin_va_end (arglist);
|
||||
case BUILT_IN_VA_COPY:
|
||||
|
|
|
@ -523,10 +523,11 @@ DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO,
|
|||
"__builtin_eh_return_data_regno",
|
||||
BT_FN_INT_INT)
|
||||
|
||||
DEF_GCC_BUILTIN(BUILT_IN_VARARGS_START,
|
||||
"__builtin_varargs_start",
|
||||
BT_FN_VOID_VALIST_REF)
|
||||
DEF_GCC_BUILTIN(BUILT_IN_STDARG_START,
|
||||
/* Variable argument list (stdarg.h) support */
|
||||
DEF_GCC_BUILTIN(BUILT_IN_VA_START,
|
||||
"__builtin_va_start",
|
||||
BT_FN_VOID_VALIST_REF_VAR)
|
||||
DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, /* backward compat */
|
||||
"__builtin_stdarg_start",
|
||||
BT_FN_VOID_VALIST_REF_VAR)
|
||||
DEF_GCC_BUILTIN(BUILT_IN_VA_END,
|
||||
|
@ -535,6 +536,7 @@ DEF_GCC_BUILTIN(BUILT_IN_VA_END,
|
|||
DEF_GCC_BUILTIN(BUILT_IN_VA_COPY,
|
||||
"__builtin_va_copy",
|
||||
BT_FN_VOID_VALIST_REF_VALIST_ARG)
|
||||
|
||||
DEF_GCC_BUILTIN(BUILT_IN_EXPECT,
|
||||
"__builtin_expect",
|
||||
BT_FN_LONG_LONG_LONG)
|
||||
|
|
20
gcc/c-decl.c
20
gcc/c-decl.c
|
@ -119,11 +119,6 @@ static GTY(()) tree named_labels;
|
|||
|
||||
static GTY(()) tree shadowed_labels;
|
||||
|
||||
/* Nonzero when store_parm_decls is called indicates a varargs function.
|
||||
Value not meaningful after store_parm_decls. */
|
||||
|
||||
static int c_function_varargs;
|
||||
|
||||
/* Set to 0 at beginning of a function definition, set to 1 if
|
||||
a return statement that specifies a return value is seen. */
|
||||
|
||||
|
@ -6027,7 +6022,6 @@ start_function (declspecs, declarator, attributes)
|
|||
current_function_returns_abnormally = 0;
|
||||
warn_about_return_type = 0;
|
||||
current_extern_inline = 0;
|
||||
c_function_varargs = 0;
|
||||
named_labels = 0;
|
||||
shadowed_labels = 0;
|
||||
|
||||
|
@ -6246,16 +6240,6 @@ start_function (declspecs, declarator, attributes)
|
|||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Record that this function is going to be a varargs function.
|
||||
This is called before store_parm_decls, which is too early
|
||||
to call mark_varargs directly. */
|
||||
|
||||
void
|
||||
c_mark_varargs ()
|
||||
{
|
||||
c_function_varargs = 1;
|
||||
}
|
||||
|
||||
/* Store the parameter declarations into the current function declaration.
|
||||
This is called after parsing the parameter declarations, before
|
||||
|
@ -6858,10 +6842,6 @@ c_expand_body (fndecl, nested_p, can_defer_p)
|
|||
immediate_size_expand = 0;
|
||||
cfun->x_dont_save_pending_sizes_p = 1;
|
||||
|
||||
/* If this is a varargs function, inform function.c. */
|
||||
if (c_function_varargs)
|
||||
mark_varargs ();
|
||||
|
||||
/* Set up parameters and prepare for return, for the function. */
|
||||
expand_function_start (fndecl, 0);
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ inline_forbidden_p (nodep, walk_subtrees, fn)
|
|||
{
|
||||
/* We cannot inline functions that take a variable number of
|
||||
arguments. */
|
||||
case BUILT_IN_VARARGS_START:
|
||||
case BUILT_IN_VA_START:
|
||||
case BUILT_IN_STDARG_START:
|
||||
#if 0
|
||||
/* Functions that need information about the address of the
|
||||
|
|
|
@ -533,21 +533,6 @@ unary_expr:
|
|||
/* Refer to the address of a label as a pointer. */
|
||||
| ANDAND identifier
|
||||
{ $$ = finish_label_address_expr ($2); }
|
||||
/* This seems to be impossible on some machines, so let's turn it off.
|
||||
You can use __builtin_next_arg to find the anonymous stack args.
|
||||
| '&' ELLIPSIS
|
||||
{ tree types = TYPE_ARG_TYPES (TREE_TYPE (current_function_decl));
|
||||
$$ = error_mark_node;
|
||||
if (TREE_VALUE (tree_last (types)) == void_type_node)
|
||||
error ("`&...' used in function with fixed number of arguments");
|
||||
else
|
||||
{
|
||||
if (pedantic)
|
||||
pedwarn ("ISO C forbids `&...'");
|
||||
$$ = tree_last (DECL_ARGUMENTS (current_function_decl));
|
||||
$$ = build_unary_op (ADDR_EXPR, $$, 0);
|
||||
} }
|
||||
*/
|
||||
| sizeof unary_expr %prec UNARY
|
||||
{ skip_evaluation--;
|
||||
if (TREE_CODE ($2) == COMPONENT_REF
|
||||
|
@ -809,11 +794,6 @@ old_style_parm_decls_1:
|
|||
parsing_iso_function_signature = false; /* Reset after warning. */
|
||||
}
|
||||
| datadecls
|
||||
| datadecls ELLIPSIS
|
||||
/* ... is used here to indicate a varargs function. */
|
||||
{ c_mark_varargs ();
|
||||
if (pedantic)
|
||||
pedwarn ("ISO C does not permit use of `varargs.h'"); }
|
||||
;
|
||||
|
||||
/* The following are analogous to lineno_decl, decls and decl
|
||||
|
|
|
@ -196,7 +196,6 @@ extern void c_print_identifier PARAMS ((FILE *, tree, int));
|
|||
extern tree build_array_declarator PARAMS ((tree, tree, int, int));
|
||||
extern tree build_enumerator PARAMS ((tree, tree));
|
||||
extern int c_decode_option PARAMS ((int, char **));
|
||||
extern void c_mark_varargs PARAMS ((void));
|
||||
extern void check_for_loop_decls PARAMS ((void));
|
||||
extern void clear_parm_order PARAMS ((void));
|
||||
extern int complete_array_type PARAMS ((tree, tree, int));
|
||||
|
|
|
@ -6163,7 +6163,7 @@ alpha_build_va_list ()
|
|||
|
||||
void
|
||||
alpha_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p;
|
||||
int stdarg_p ATTRIBUTE_UNUSED;
|
||||
tree valist;
|
||||
rtx nextarg ATTRIBUTE_UNUSED;
|
||||
{
|
||||
|
@ -6174,7 +6174,7 @@ alpha_va_start (stdarg_p, valist, nextarg)
|
|||
return;
|
||||
|
||||
if (TARGET_ABI_UNICOSMK)
|
||||
std_expand_builtin_va_start (stdarg_p, valist, nextarg);
|
||||
std_expand_builtin_va_start (1, valist, nextarg);
|
||||
|
||||
/* For Unix, SETUP_INCOMING_VARARGS moves the starting address base
|
||||
up by 48, storing fp arg registers in the first 48 bytes, and the
|
||||
|
@ -6185,7 +6185,7 @@ alpha_va_start (stdarg_p, valist, nextarg)
|
|||
in order to account for the integer arg registers which are counted
|
||||
in argsize above, but which are not actually stored on the stack. */
|
||||
|
||||
if (NUM_ARGS <= 5 + stdarg_p)
|
||||
if (NUM_ARGS <= 6)
|
||||
offset = TARGET_ABI_OPEN_VMS ? UNITS_PER_WORD : 6 * UNITS_PER_WORD;
|
||||
else
|
||||
offset = -6 * UNITS_PER_WORD;
|
||||
|
@ -6732,7 +6732,7 @@ alpha_sa_size ()
|
|||
|
||||
alpha_procedure_type
|
||||
= (sa_size || get_frame_size() != 0
|
||||
|| current_function_outgoing_args_size || current_function_varargs
|
||||
|| current_function_outgoing_args_size
|
||||
|| current_function_stdarg || current_function_calls_alloca
|
||||
|| frame_pointer_needed)
|
||||
? PT_STACK : PT_REGISTER;
|
||||
|
|
|
@ -237,10 +237,7 @@ do { \
|
|||
On Unicos/Mk, the standard subroutine __T3E_MISMATCH stores all register
|
||||
arguments on the stack. Unfortunately, it doesn't always store the first
|
||||
one (i.e. the one that arrives in $16 or $f16). This is not a problem
|
||||
with stdargs as we always have at least one named argument there. This is
|
||||
not always the case when varargs.h is used, however. In such cases, we
|
||||
have to store the first argument ourselves. We use the information from
|
||||
the CIW to determine whether the first argument arrives in $16 or $f16. */
|
||||
with stdargs as we always have at least one named argument there. */
|
||||
|
||||
#undef SETUP_INCOMING_VARARGS
|
||||
#define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) \
|
||||
|
@ -248,36 +245,9 @@ do { \
|
|||
{ \
|
||||
if (! (NO_RTL)) \
|
||||
{ \
|
||||
int start; \
|
||||
\
|
||||
start = (CUM).num_reg_words; \
|
||||
if (!current_function_varargs || start == 0) \
|
||||
++start; \
|
||||
int start = (CUM).num_reg_words + 1; \
|
||||
\
|
||||
emit_insn (gen_umk_mismatch_args (GEN_INT (start))); \
|
||||
if (current_function_varargs && (CUM).num_reg_words == 0) \
|
||||
{ \
|
||||
rtx tmp; \
|
||||
rtx int_label, end_label; \
|
||||
\
|
||||
tmp = gen_reg_rtx (DImode); \
|
||||
emit_move_insn (tmp, \
|
||||
gen_rtx_ZERO_EXTRACT (DImode, \
|
||||
gen_rtx_REG (DImode, 2),\
|
||||
(GEN_INT (1)), \
|
||||
(GEN_INT (7)))); \
|
||||
int_label = gen_label_rtx (); \
|
||||
end_label = gen_label_rtx (); \
|
||||
emit_insn (gen_cmpdi (tmp, GEN_INT (0))); \
|
||||
emit_jump_insn (gen_beq (int_label)); \
|
||||
emit_move_insn (gen_rtx_MEM (DFmode, virtual_incoming_args_rtx),\
|
||||
gen_rtx_REG (DFmode, 48)); \
|
||||
emit_jump (end_label); \
|
||||
emit_label (int_label); \
|
||||
emit_move_insn (gen_rtx_MEM (DImode, virtual_incoming_args_rtx),\
|
||||
gen_rtx_REG (DImode, 16)); \
|
||||
emit_label (end_label); \
|
||||
} \
|
||||
emit_insn (gen_arg_home_umk ()); \
|
||||
} \
|
||||
\
|
||||
|
|
|
@ -802,12 +802,8 @@ arc_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
|
|||
if (mode == BLKmode)
|
||||
abort ();
|
||||
|
||||
/* We must treat `__builtin_va_alist' as an anonymous arg. */
|
||||
if (current_function_varargs)
|
||||
first_anon_arg = *cum;
|
||||
else
|
||||
first_anon_arg = *cum + ((GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1)
|
||||
/ UNITS_PER_WORD);
|
||||
first_anon_arg = *cum + ((GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1)
|
||||
/ UNITS_PER_WORD);
|
||||
|
||||
if (first_anon_arg < MAX_ARC_PARM_REGS && !no_rtl)
|
||||
{
|
||||
|
@ -2266,7 +2262,7 @@ arc_ccfsm_record_branch_deleted ()
|
|||
|
||||
void
|
||||
arc_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p;
|
||||
int stdarg_p ATTRIBUTE_UNUSED;
|
||||
tree valist;
|
||||
rtx nextarg;
|
||||
{
|
||||
|
@ -2275,7 +2271,7 @@ arc_va_start (stdarg_p, valist, nextarg)
|
|||
&& (current_function_args_info & 1))
|
||||
nextarg = plus_constant (nextarg, UNITS_PER_WORD);
|
||||
|
||||
std_expand_builtin_va_start (stdarg_p, valist, nextarg);
|
||||
std_expand_builtin_va_start (1, valist, nextarg);
|
||||
}
|
||||
|
||||
rtx
|
||||
|
|
|
@ -665,15 +665,9 @@ extern enum reg_class arc_regno_reg_class[FIRST_PSEUDO_REGISTER];
|
|||
a reg. This includes arguments that have to be passed by reference as the
|
||||
pointer to them is passed in a reg if one is available (and that is what
|
||||
we're given).
|
||||
When passing arguments NAMED is always 1. When receiving arguments NAMED
|
||||
is 1 for each argument except the last in a stdarg/varargs function. In
|
||||
a stdarg function we want to treat the last named arg as named. In a
|
||||
varargs function we want to treat the last named arg (which is
|
||||
`__builtin_va_alist') as unnamed.
|
||||
This macro is only used in this file. */
|
||||
#define PASS_IN_REG_P(CUM, MODE, TYPE, NAMED) \
|
||||
((!current_function_varargs || (NAMED)) \
|
||||
&& (CUM) < MAX_ARC_PARM_REGS \
|
||||
#define PASS_IN_REG_P(CUM, MODE, TYPE) \
|
||||
((CUM) < MAX_ARC_PARM_REGS \
|
||||
&& ((ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE)) \
|
||||
+ ROUND_ADVANCE_ARG ((MODE), (TYPE)) \
|
||||
<= MAX_ARC_PARM_REGS)))
|
||||
|
@ -693,7 +687,7 @@ extern enum reg_class arc_regno_reg_class[FIRST_PSEUDO_REGISTER];
|
|||
/* On the ARC the first MAX_ARC_PARM_REGS args are normally in registers
|
||||
and the rest are pushed. */
|
||||
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
|
||||
(PASS_IN_REG_P ((CUM), (MODE), (TYPE), (NAMED)) \
|
||||
(PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
|
||||
? gen_rtx_REG ((MODE), ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE))) \
|
||||
: 0)
|
||||
|
||||
|
|
|
@ -2787,7 +2787,6 @@ frame_pointer_required_p ()
|
|||
{
|
||||
return (current_function_calls_alloca
|
||||
|| current_function_args_info.nregs == 0
|
||||
|| current_function_varargs
|
||||
|| get_frame_size () > 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -59,8 +59,6 @@ extern struct rtx_def *c4x_function_arg PARAMS ((CUMULATIVE_ARGS *,
|
|||
#if defined(RTX_CODE) && defined(TREE_CODE)
|
||||
extern void c4x_init_cumulative_args PARAMS ((CUMULATIVE_ARGS *c, tree, rtx));
|
||||
|
||||
extern void c4x_va_start PARAMS ((int, tree, rtx));
|
||||
|
||||
extern struct rtx_def *c4x_va_arg PARAMS ((tree, tree));
|
||||
|
||||
extern rtx c4x_expand_builtin PARAMS ((tree, rtx, rtx,
|
||||
|
|
|
@ -702,19 +702,6 @@ c4x_function_arg (cum, mode, type, named)
|
|||
return NULL_RTX;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
c4x_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p;
|
||||
tree valist;
|
||||
rtx nextarg;
|
||||
{
|
||||
nextarg = plus_constant (nextarg, stdarg_p ? 0 : UNITS_PER_WORD * 2);
|
||||
|
||||
std_expand_builtin_va_start (stdarg_p, valist, nextarg);
|
||||
}
|
||||
|
||||
|
||||
/* C[34]x arguments grow in weird ways (downwards) that the standard
|
||||
varargs stuff can't handle.. */
|
||||
rtx
|
||||
|
|
|
@ -1166,9 +1166,6 @@ CUMULATIVE_ARGS;
|
|||
|
||||
/* Varargs handling. */
|
||||
|
||||
#define EXPAND_BUILTIN_VA_START(stdarg, valist, nextarg) \
|
||||
c4x_va_start (stdarg, valist, nextarg)
|
||||
|
||||
#define EXPAND_BUILTIN_VA_ARG(valist, type) \
|
||||
c4x_va_arg (valist, type)
|
||||
|
||||
|
|
|
@ -1044,8 +1044,7 @@ struct cum_args {int regs;};
|
|||
if (TARGET_PDEBUG) \
|
||||
{ \
|
||||
fprintf (asm_out_file, \
|
||||
"\n; VA:: %s: %d args before, anon @ #%d, %dtime\n", \
|
||||
current_function_varargs ? "OLD" : "ANSI", \
|
||||
"\n; VA:: ANSI: %d args before, anon @ #%d, %dtime\n", \
|
||||
(ARGSSF).regs, PRETEND, SECOND); \
|
||||
} \
|
||||
} \
|
||||
|
|
|
@ -419,11 +419,9 @@ fr30_setup_incoming_varargs (arg_regs_used_so_far, int_mode, type, pretend_size)
|
|||
abort ();
|
||||
|
||||
#if STRICT_ARGUMENT_NAMING
|
||||
/* We must treat `__builtin_va_alist' as an anonymous arg.
|
||||
But otherwise if STRICT_ARGUMENT_NAMING is true then the
|
||||
last named arg must not be treated as an anonymous arg. */
|
||||
if (! current_function_varargs)
|
||||
arg_regs_used_so_far += fr30_num_arg_regs (int_mode, type);
|
||||
/* If STRICT_ARGUMENT_NAMING is true then the last named
|
||||
arg must not be treated as an anonymous arg. */
|
||||
arg_regs_used_so_far += fr30_num_arg_regs (int_mode, type);
|
||||
#endif
|
||||
|
||||
size = FR30_NUM_ARG_REGS - arg_regs_used_so_far;
|
||||
|
|
|
@ -2447,7 +2447,7 @@ ix86_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
|
|||
|
||||
void
|
||||
ix86_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p;
|
||||
int stdarg_p ATTRIBUTE_UNUSED;
|
||||
tree valist;
|
||||
rtx nextarg;
|
||||
{
|
||||
|
@ -2458,7 +2458,7 @@ ix86_va_start (stdarg_p, valist, nextarg)
|
|||
/* Only 64bit target needs something special. */
|
||||
if (!TARGET_64BIT)
|
||||
{
|
||||
std_expand_builtin_va_start (stdarg_p, valist, nextarg);
|
||||
std_expand_builtin_va_start (1, valist, nextarg);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -85,9 +85,9 @@ static int ret_label = 0;
|
|||
This is used to help identify functions that use an argument block. */
|
||||
|
||||
#define VARARGS_STDARG_FUNCTION(FNDECL) \
|
||||
((TYPE_ARG_TYPES (TREE_TYPE (FNDECL)) != 0 \
|
||||
&& (TREE_VALUE (tree_last (TYPE_ARG_TYPES (TREE_TYPE (FNDECL)))) != void_type_node)) \
|
||||
|| current_function_varargs)
|
||||
(TYPE_ARG_TYPES (TREE_TYPE (FNDECL)) != 0 \
|
||||
&& (TREE_VALUE (tree_last (TYPE_ARG_TYPES (TREE_TYPE (FNDECL))))) \
|
||||
!= void_type_node)
|
||||
|
||||
/* Initialize the GCC target structure. */
|
||||
#undef TARGET_ASM_ALIGNED_SI_OP
|
||||
|
@ -518,7 +518,7 @@ emit_move_sequence (operands, mode)
|
|||
|
||||
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) != REG
|
||||
&& (operands[1] != const0_rtx || current_function_args_size
|
||||
|| current_function_varargs || current_function_stdarg
|
||||
|| current_function_stdarg
|
||||
|| rtx_equal_function_value_matters))
|
||||
/* Here we use the same test as movsi+1 pattern -- see i960.md. */
|
||||
operands[1] = force_reg (mode, operands[1]);
|
||||
|
|
|
@ -594,7 +594,7 @@
|
|||
;; the calling convention is defined so that the arg pointer when it is not
|
||||
;; overwise being used is zero. Thus, we can handle store zero to memory
|
||||
;; by storing an unused arg pointer. The arg pointer will be unused if
|
||||
;; current_function_args_size is zero and this is not a stdarg/varargs
|
||||
;; current_function_args_size is zero and this is not a stdarg
|
||||
;; function. This value of the former variable is not valid until after
|
||||
;; all rtl generation is complete, including function inlining (because a
|
||||
;; function that doesn't need an arg pointer may be inlined into a function
|
||||
|
@ -605,7 +605,6 @@
|
|||
[(set (match_operand:SI 0 "general_operand" "=d,d,d,m")
|
||||
(match_operand:SI 1 "general_operand" "dI,i,m,dJ"))]
|
||||
"(current_function_args_size == 0
|
||||
&& current_function_varargs == 0
|
||||
&& current_function_stdarg == 0
|
||||
&& rtx_equal_function_value_matters == 0)
|
||||
&& (register_operand (operands[0], SImode)
|
||||
|
@ -643,7 +642,6 @@
|
|||
[(set (match_operand:SI 0 "general_operand" "=d,d,d,m")
|
||||
(match_operand:SI 1 "general_operand" "dI,i,m,d"))]
|
||||
"(current_function_args_size != 0
|
||||
|| current_function_varargs != 0
|
||||
|| current_function_stdarg != 0
|
||||
|| rtx_equal_function_value_matters != 0)
|
||||
&& (register_operand (operands[0], SImode)
|
||||
|
@ -692,7 +690,6 @@
|
|||
[(set (match_operand:HI 0 "general_operand" "=d,d,d,m")
|
||||
(match_operand:HI 1 "general_operand" "dI,i,m,dJ"))]
|
||||
"(current_function_args_size == 0
|
||||
&& current_function_varargs == 0
|
||||
&& current_function_stdarg == 0
|
||||
&& rtx_equal_function_value_matters == 0)
|
||||
&& (register_operand (operands[0], HImode)
|
||||
|
@ -731,7 +728,6 @@
|
|||
[(set (match_operand:HI 0 "general_operand" "=d,d,d,m")
|
||||
(match_operand:HI 1 "general_operand" "dI,i,m,d"))]
|
||||
"(current_function_args_size != 0
|
||||
|| current_function_varargs != 0
|
||||
|| current_function_stdarg != 0
|
||||
|| rtx_equal_function_value_matters != 0)
|
||||
&& (register_operand (operands[0], HImode)
|
||||
|
@ -777,7 +773,6 @@
|
|||
[(set (match_operand:QI 0 "general_operand" "=d,d,d,m")
|
||||
(match_operand:QI 1 "general_operand" "dI,i,m,dJ"))]
|
||||
"(current_function_args_size == 0
|
||||
&& current_function_varargs == 0
|
||||
&& current_function_stdarg == 0
|
||||
&& rtx_equal_function_value_matters == 0)
|
||||
&& (register_operand (operands[0], QImode)
|
||||
|
@ -816,7 +811,6 @@
|
|||
[(set (match_operand:QI 0 "general_operand" "=d,d,d,m")
|
||||
(match_operand:QI 1 "general_operand" "dI,i,m,d"))]
|
||||
"(current_function_args_size != 0
|
||||
|| current_function_varargs != 0
|
||||
|| current_function_stdarg != 0
|
||||
|| rtx_equal_function_value_matters != 0)
|
||||
&& (register_operand (operands[0], QImode)
|
||||
|
@ -862,7 +856,6 @@
|
|||
[(set (match_operand:DI 0 "general_operand" "=d,d,d,d,m,o")
|
||||
(match_operand:DI 1 "general_operand" "d,I,i,m,d,J"))]
|
||||
"(current_function_args_size == 0
|
||||
&& current_function_varargs == 0
|
||||
&& current_function_stdarg == 0
|
||||
&& rtx_equal_function_value_matters == 0)
|
||||
&& (register_operand (operands[0], DImode)
|
||||
|
@ -892,7 +885,6 @@
|
|||
[(set (match_operand:DI 0 "general_operand" "=d,d,d,d,m")
|
||||
(match_operand:DI 1 "general_operand" "d,I,i,m,d"))]
|
||||
"(current_function_args_size != 0
|
||||
|| current_function_varargs != 0
|
||||
|| current_function_stdarg != 0
|
||||
|| rtx_equal_function_value_matters != 0)
|
||||
&& (register_operand (operands[0], DImode)
|
||||
|
@ -945,7 +937,6 @@
|
|||
[(set (match_operand:TI 0 "general_operand" "=d,d,d,d,m,o")
|
||||
(match_operand:TI 1 "general_operand" "d,I,i,m,d,J"))]
|
||||
"(current_function_args_size == 0
|
||||
&& current_function_varargs == 0
|
||||
&& current_function_stdarg == 0
|
||||
&& rtx_equal_function_value_matters == 0)
|
||||
&& (register_operand (operands[0], TImode)
|
||||
|
@ -975,7 +966,6 @@
|
|||
[(set (match_operand:TI 0 "general_operand" "=d,d,d,d,m")
|
||||
(match_operand:TI 1 "general_operand" "d,I,i,m,d"))]
|
||||
"(current_function_args_size != 0
|
||||
|| current_function_varargs != 0
|
||||
|| current_function_stdarg != 0
|
||||
|| rtx_equal_function_value_matters != 0)
|
||||
&& (register_operand (operands[0], TImode)
|
||||
|
@ -1079,7 +1069,6 @@
|
|||
[(set (match_operand:DF 0 "general_operand" "=r,*f,d,d,m,o")
|
||||
(match_operand:DF 1 "fpmove_src_operand" "r,GH,F,m,d,G"))]
|
||||
"(current_function_args_size == 0
|
||||
&& current_function_varargs == 0
|
||||
&& current_function_stdarg == 0
|
||||
&& rtx_equal_function_value_matters == 0)
|
||||
&& (register_operand (operands[0], DFmode)
|
||||
|
@ -1115,7 +1104,6 @@
|
|||
[(set (match_operand:DF 0 "general_operand" "=r,*f,d,d,m")
|
||||
(match_operand:DF 1 "fpmove_src_operand" "r,GH,F,m,d"))]
|
||||
"(current_function_args_size != 0
|
||||
|| current_function_varargs != 0
|
||||
|| current_function_stdarg != 0
|
||||
|| rtx_equal_function_value_matters != 0)
|
||||
&& (register_operand (operands[0], DFmode)
|
||||
|
@ -1157,7 +1145,6 @@
|
|||
[(set (match_operand:SF 0 "general_operand" "=r,*f,d,d,m")
|
||||
(match_operand:SF 1 "fpmove_src_operand" "r,GH,F,m,dG"))]
|
||||
"(current_function_args_size == 0
|
||||
&& current_function_varargs == 0
|
||||
&& current_function_stdarg == 0
|
||||
&& rtx_equal_function_value_matters == 0)
|
||||
&& (register_operand (operands[0], SFmode)
|
||||
|
@ -1192,7 +1179,6 @@
|
|||
[(set (match_operand:SF 0 "general_operand" "=r,*f,d,d,m")
|
||||
(match_operand:SF 1 "fpmove_src_operand" "r,GH,F,m,d"))]
|
||||
"(current_function_args_size != 0
|
||||
|| current_function_varargs != 0
|
||||
|| current_function_stdarg != 0
|
||||
|| rtx_equal_function_value_matters != 0)
|
||||
&& (register_operand (operands[0], SFmode)
|
||||
|
|
|
@ -104,7 +104,6 @@ extern rtx ia64_function_arg PARAMS((CUMULATIVE_ARGS *, enum machine_mode,
|
|||
tree, int, int));
|
||||
extern rtx ia64_expand_builtin PARAMS((tree, rtx, rtx,
|
||||
enum machine_mode, int));
|
||||
extern void ia64_va_start PARAMS((int, tree, rtx));
|
||||
extern rtx ia64_va_arg PARAMS((tree, tree));
|
||||
extern rtx ia64_function_value PARAMS((tree, tree));
|
||||
#endif /* RTX_CODE */
|
||||
|
|
|
@ -3050,9 +3050,8 @@ ia64_setup_incoming_varargs (cum, int_mode, type, pretend_size, second_time)
|
|||
int * pretend_size;
|
||||
int second_time ATTRIBUTE_UNUSED;
|
||||
{
|
||||
/* If this is a stdarg function, then skip the current argument. */
|
||||
if (! current_function_varargs)
|
||||
ia64_function_arg_advance (&cum, int_mode, type, 1);
|
||||
/* Skip the current argument. */
|
||||
ia64_function_arg_advance (&cum, int_mode, type, 1);
|
||||
|
||||
if (cum.words < MAX_ARGUMENT_SLOTS)
|
||||
{
|
||||
|
@ -3453,27 +3452,6 @@ ia64_function_arg_pass_by_reference (cum, mode, type, named)
|
|||
return type && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST;
|
||||
}
|
||||
|
||||
/* Implement va_start. */
|
||||
|
||||
void
|
||||
ia64_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p;
|
||||
tree valist;
|
||||
rtx nextarg;
|
||||
{
|
||||
int arg_words;
|
||||
int ofs;
|
||||
|
||||
arg_words = current_function_args_info.words;
|
||||
|
||||
if (stdarg_p)
|
||||
ofs = 0;
|
||||
else
|
||||
ofs = (arg_words >= MAX_ARGUMENT_SLOTS ? -UNITS_PER_WORD : 0);
|
||||
|
||||
nextarg = plus_constant (nextarg, ofs);
|
||||
std_expand_builtin_va_start (1, valist, nextarg);
|
||||
}
|
||||
|
||||
/* Implement va_arg. */
|
||||
|
||||
|
|
|
@ -1339,10 +1339,6 @@ do { \
|
|||
(((REGNO) >= GR_ARG_FIRST && (REGNO) < (GR_ARG_FIRST + MAX_ARGUMENT_SLOTS)) \
|
||||
|| ((REGNO) >= FR_ARG_FIRST && (REGNO) < (FR_ARG_FIRST + MAX_ARGUMENT_SLOTS)))
|
||||
|
||||
/* Implement `va_start' for varargs and stdarg. */
|
||||
#define EXPAND_BUILTIN_VA_START(stdarg, valist, nextarg) \
|
||||
ia64_va_start (stdarg, valist, nextarg)
|
||||
|
||||
/* Implement `va_arg'. */
|
||||
#define EXPAND_BUILTIN_VA_ARG(valist, type) \
|
||||
ia64_va_arg (valist, type)
|
||||
|
|
|
@ -1446,12 +1446,8 @@ m32r_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
|
|||
if (mode == BLKmode)
|
||||
abort ();
|
||||
|
||||
/* We must treat `__builtin_va_alist' as an anonymous arg. */
|
||||
if (current_function_varargs)
|
||||
first_anon_arg = *cum;
|
||||
else
|
||||
first_anon_arg = (ROUND_ADVANCE_CUM (*cum, mode, type)
|
||||
+ ROUND_ADVANCE_ARG (mode, type));
|
||||
first_anon_arg = (ROUND_ADVANCE_CUM (*cum, mode, type)
|
||||
+ ROUND_ADVANCE_ARG (mode, type));
|
||||
|
||||
if (first_anon_arg < M32R_MAX_PARM_REGS)
|
||||
{
|
||||
|
|
|
@ -1084,7 +1084,7 @@ M32R_STACK_ALIGN (current_function_outgoing_args_size)
|
|||
pointer to them is passed in a reg if one is available (and that is what
|
||||
we're given).
|
||||
This macro is only used in this file. */
|
||||
#define PASS_IN_REG_P(CUM, MODE, TYPE, NAMED) \
|
||||
#define PASS_IN_REG_P(CUM, MODE, TYPE) \
|
||||
(ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE)) < M32R_MAX_PARM_REGS)
|
||||
|
||||
/* Determine where to put an argument to a function.
|
||||
|
@ -1102,14 +1102,7 @@ M32R_STACK_ALIGN (current_function_outgoing_args_size)
|
|||
/* On the M32R the first M32R_MAX_PARM_REGS args are normally in registers
|
||||
and the rest are pushed. */
|
||||
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
|
||||
(PASS_IN_REG_P ((CUM), (MODE), (TYPE), (NAMED)) \
|
||||
? gen_rtx_REG ((MODE), ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE))) \
|
||||
: 0)
|
||||
|
||||
/* ??? Quick hack to try to get varargs working the normal way. */
|
||||
#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
|
||||
(((! current_function_varargs || (NAMED)) \
|
||||
&& PASS_IN_REG_P ((CUM), (MODE), (TYPE), (NAMED))) \
|
||||
(PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
|
||||
? gen_rtx_REG ((MODE), ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE))) \
|
||||
: 0)
|
||||
|
||||
|
|
|
@ -152,10 +152,7 @@ extern int m68hc11_function_arg_pass_by_reference PARAMS((const CUMULATIVE_ARGS*
|
|||
int));
|
||||
extern int m68hc11_function_arg_padding PARAMS((enum machine_mode, tree));
|
||||
|
||||
extern void m68hc11_expand_builtin_va_start PARAMS((int, tree, rtx));
|
||||
|
||||
extern rtx m68hc11_va_arg PARAMS((tree,tree));
|
||||
extern void m68hc11_expand_builtin_va_start PARAMS((int,tree,rtx));
|
||||
|
||||
extern void m68hc11_function_epilogue PARAMS((FILE*,int));
|
||||
|
||||
|
|
|
@ -1455,29 +1455,6 @@ m68hc11_function_arg (cum, mode, type, named)
|
|||
return NULL_RTX;
|
||||
}
|
||||
|
||||
/* The "standard" implementation of va_start: just assign `nextarg' to
|
||||
the variable. */
|
||||
void
|
||||
m68hc11_expand_builtin_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p ATTRIBUTE_UNUSED;
|
||||
tree valist;
|
||||
rtx nextarg;
|
||||
{
|
||||
tree t;
|
||||
|
||||
/* SCz: the default implementation in builtins.c adjust the
|
||||
nextarg using UNITS_PER_WORD. This works only with -mshort
|
||||
and fails when integers are 32-bit. Here is the correct way. */
|
||||
if (!stdarg_p)
|
||||
nextarg = plus_constant (nextarg, -INT_TYPE_SIZE / 8);
|
||||
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (valist), valist,
|
||||
make_tree (ptr_type_node, nextarg));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
||||
rtx
|
||||
m68hc11_va_arg (valist, type)
|
||||
tree valist;
|
||||
|
|
|
@ -1074,9 +1074,6 @@ typedef struct m68hc11_args
|
|||
#define CALLER_SAVE_PROFITABLE(REFS,CALLS) 0
|
||||
|
||||
/* Implement `va_arg'. */
|
||||
#define EXPAND_BUILTIN_VA_START(stdarg, valist, nextarg) \
|
||||
m68hc11_expand_builtin_va_start (stdarg, valist, nextarg)
|
||||
|
||||
#define EXPAND_BUILTIN_VA_ARG(valist, type) \
|
||||
m68hc11_va_arg (valist, type)
|
||||
|
||||
|
|
|
@ -1947,7 +1947,6 @@ uses_arg_area_p ()
|
|||
register tree parm;
|
||||
|
||||
if (current_function_decl == 0
|
||||
|| current_function_varargs
|
||||
|| variable_args_p)
|
||||
return 1;
|
||||
|
||||
|
|
|
@ -1052,8 +1052,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
|
|||
may be accessed via the stack pointer) in functions that seem suitable.
|
||||
This is computed in `reload', in reload1.c. */
|
||||
#define FRAME_POINTER_REQUIRED \
|
||||
(current_function_varargs \
|
||||
|| (TARGET_OMIT_LEAF_FRAME_POINTER && !leaf_function_p ()) \
|
||||
((TARGET_OMIT_LEAF_FRAME_POINTER && !leaf_function_p ()) \
|
||||
|| (write_symbols != NO_DEBUG && !TARGET_OCS_FRAME_POSITION))
|
||||
|
||||
/* Definitions for register eliminations.
|
||||
|
|
|
@ -4485,15 +4485,10 @@ mips_setup_incoming_varargs (cum, mode, type, no_rtl)
|
|||
|
||||
/* The caller has advanced CUM up to, but not beyond, the last named
|
||||
argument. Advance a local copy of CUM past the last "real" named
|
||||
argument, to find out how many registers are left over.
|
||||
argument, to find out how many registers are left over. */
|
||||
|
||||
For K&R varargs, the last named argument is a dummy word-sized one,
|
||||
so CUM already contains the information we need. For stdarg, it is
|
||||
a real argument (such as the format in printf()) and we need to
|
||||
step over it. */
|
||||
local_cum = *cum;
|
||||
if (!current_function_varargs)
|
||||
FUNCTION_ARG_ADVANCE (local_cum, mode, type, 1);
|
||||
FUNCTION_ARG_ADVANCE (local_cum, mode, type, 1);
|
||||
|
||||
/* Found out how many registers we need to save. */
|
||||
gp_saved = MAX_ARGS_IN_REGISTERS - local_cum.num_gprs;
|
||||
|
@ -4611,14 +4606,11 @@ mips_build_va_list ()
|
|||
return ptr_type_node;
|
||||
}
|
||||
|
||||
/* Implement va_start. stdarg_p is 0 if implementing
|
||||
__builtin_varargs_va_start, 1 if implementing __builtin_stdarg_va_start.
|
||||
Note that this routine isn't called when compiling e.g. "_vfprintf_r".
|
||||
(It doesn't have "...", so it inherits the pointers of its caller.) */
|
||||
/* Implement va_start. stdarg_p is always 1. */
|
||||
|
||||
void
|
||||
mips_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p;
|
||||
int stdarg_p ATTRIBUTE_UNUSED;
|
||||
tree valist;
|
||||
rtx nextarg;
|
||||
{
|
||||
|
@ -4696,39 +4688,12 @@ mips_va_start (stdarg_p, valist, nextarg)
|
|||
{
|
||||
/* Everything is in the GPR save area, or in the overflow
|
||||
area which is contiguous with it. */
|
||||
|
||||
int offset = -gpr_save_area_size;
|
||||
if (gpr_save_area_size == 0)
|
||||
offset = (stdarg_p ? 0 : -UNITS_PER_WORD);
|
||||
nextarg = plus_constant (nextarg, offset);
|
||||
nextarg = plus_constant (nextarg, -gpr_save_area_size);
|
||||
std_expand_builtin_va_start (1, valist, nextarg);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* not EABI */
|
||||
int ofs;
|
||||
|
||||
if (stdarg_p)
|
||||
ofs = 0;
|
||||
else
|
||||
{
|
||||
/* ??? This had been conditional on
|
||||
_MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
and both iris5.h and iris6.h define _MIPS_SIM. */
|
||||
if (mips_abi == ABI_N32
|
||||
|| mips_abi == ABI_64
|
||||
|| mips_abi == ABI_MEABI)
|
||||
ofs = (cum->num_gprs < MAX_ARGS_IN_REGISTERS
|
||||
? 0
|
||||
: -UNITS_PER_WORD);
|
||||
else
|
||||
ofs = -UNITS_PER_WORD;
|
||||
}
|
||||
|
||||
nextarg = plus_constant (nextarg, ofs);
|
||||
std_expand_builtin_va_start (1, valist, nextarg);
|
||||
}
|
||||
std_expand_builtin_va_start (1, valist, nextarg);
|
||||
}
|
||||
|
||||
/* Implement va_arg. */
|
||||
|
@ -7241,7 +7206,7 @@ mips_output_function_prologue (file, size)
|
|||
|
||||
/* If this is a varargs function, we need to save all the
|
||||
registers onto the stack anyhow. */
|
||||
if (current_function_stdarg || current_function_varargs)
|
||||
if (current_function_stdarg)
|
||||
savearg = GP_REG_FIRST + 7;
|
||||
|
||||
fprintf (file, "\tentry\t");
|
||||
|
|
|
@ -546,14 +546,6 @@ mmix_function_arg (argsp, mode, type, named, incoming)
|
|||
int named ATTRIBUTE_UNUSED;
|
||||
int incoming;
|
||||
{
|
||||
/* Handling of the positional dummy parameter for varargs gets nasty.
|
||||
Check execute/991216-3 and function.c:assign_params. We have to say
|
||||
that the dummy parameter goes on stack in order to get the correct
|
||||
offset when va_start and va_arg is applied. FIXME: Should do TRT by
|
||||
itself in the gcc core. */
|
||||
if ((! named && incoming && current_function_varargs) || argsp->now_varargs)
|
||||
return NULL_RTX;
|
||||
|
||||
/* Last-argument marker. */
|
||||
if (type == void_type_node)
|
||||
return (argsp->regs < MMIX_MAX_ARGS_IN_REGS)
|
||||
|
@ -828,31 +820,10 @@ mmix_setup_incoming_varargs (args_so_farp, mode, vartype, pretend_sizep,
|
|||
int * pretend_sizep;
|
||||
int second_time ATTRIBUTE_UNUSED;
|
||||
{
|
||||
/* For stdarg, the last named variable has been handled, but
|
||||
args_so_farp has not been advanced for it. For varargs, the current
|
||||
argument is to be counted to the anonymous ones. */
|
||||
if (current_function_stdarg)
|
||||
{
|
||||
if (args_so_farp->regs + 1 < MMIX_MAX_ARGS_IN_REGS)
|
||||
*pretend_sizep
|
||||
= (MMIX_MAX_ARGS_IN_REGS - (args_so_farp->regs + 1)) * 8;
|
||||
}
|
||||
else if (current_function_varargs)
|
||||
{
|
||||
if (args_so_farp->regs < MMIX_MAX_ARGS_IN_REGS)
|
||||
*pretend_sizep
|
||||
= (MMIX_MAX_ARGS_IN_REGS - args_so_farp->regs) * 8;
|
||||
|
||||
/* For varargs, we get here when we see the last named parameter,
|
||||
which will actually be passed on stack. So make the next call
|
||||
(there will be one) to FUNCTION_ARG return 0, to count it on
|
||||
stack, so va_arg for it will get right. FIXME: The GCC core
|
||||
should provide TRT. */
|
||||
args_so_farp->now_varargs = 1;
|
||||
}
|
||||
else
|
||||
internal_error ("neither varargs or stdarg in mmix_setup_incoming_varargs");
|
||||
|
||||
/* The last named variable has been handled, but
|
||||
args_so_farp has not been advanced for it. */
|
||||
if (args_so_farp->regs + 1 < MMIX_MAX_ARGS_IN_REGS)
|
||||
*pretend_sizep = (MMIX_MAX_ARGS_IN_REGS - (args_so_farp->regs + 1)) * 8;
|
||||
|
||||
/* We assume that one argument takes up one register here. That should
|
||||
be true until we start messing with multi-reg parameters. */
|
||||
|
|
|
@ -738,10 +738,10 @@ enum reg_class
|
|||
replace with a big comment. */
|
||||
#define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) 1
|
||||
|
||||
typedef struct { int regs; int lib; int now_varargs; } CUMULATIVE_ARGS;
|
||||
typedef struct { int regs; int lib; } CUMULATIVE_ARGS;
|
||||
|
||||
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
|
||||
((CUM).regs = 0, (CUM).lib = ((LIBNAME) != 0), (CUM).now_varargs = 0)
|
||||
((CUM).regs = 0, (CUM).lib = ((LIBNAME) != 0))
|
||||
|
||||
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
|
||||
((CUM).regs \
|
||||
|
|
|
@ -525,18 +525,6 @@ expand_prologue ()
|
|||
size = get_frame_size () + current_function_outgoing_args_size;
|
||||
size += (current_function_outgoing_args_size ? 4 : 0);
|
||||
|
||||
/* If this is an old-style varargs function, then its arguments
|
||||
need to be flushed back to the stack. */
|
||||
if (current_function_varargs)
|
||||
{
|
||||
emit_move_insn (gen_rtx_MEM (SImode,
|
||||
plus_constant (stack_pointer_rtx, 4)),
|
||||
gen_rtx_REG (SImode, 0));
|
||||
emit_move_insn (gen_rtx_MEM (SImode,
|
||||
plus_constant (stack_pointer_rtx, 8)),
|
||||
gen_rtx_REG (SImode, 1));
|
||||
}
|
||||
|
||||
/* If we use any of the callee-saved registers, save them now. */
|
||||
mn10300_gen_multiple_store (mn10300_get_live_callee_saved_regs ());
|
||||
|
||||
|
@ -887,13 +875,11 @@ mn10300_builtin_saveregs ()
|
|||
|
||||
void
|
||||
mn10300_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p;
|
||||
int stdarg_p ATTRIBUTE_UNUSED;
|
||||
tree valist;
|
||||
rtx nextarg;
|
||||
{
|
||||
if (stdarg_p)
|
||||
nextarg = expand_builtin_saveregs ();
|
||||
|
||||
nextarg = expand_builtin_saveregs ();
|
||||
std_expand_builtin_va_start (stdarg_p, valist, nextarg);
|
||||
}
|
||||
|
||||
|
|
|
@ -198,10 +198,9 @@ do { \
|
|||
} \
|
||||
} \
|
||||
/* anonymous args */ \
|
||||
if ((TYPE_ARG_TYPES (tree_type) != 0 \
|
||||
&& (TREE_VALUE (tree_last (TYPE_ARG_TYPES (tree_type)))\
|
||||
!= void_type_node)) \
|
||||
|| current_function_varargs) \
|
||||
if (TYPE_ARG_TYPES (tree_type) != 0 \
|
||||
&& (TREE_VALUE (tree_last (TYPE_ARG_TYPES (tree_type)))\
|
||||
!= void_type_node)) \
|
||||
{ \
|
||||
for (; i < 4; i++) \
|
||||
fprintf (FILE, ",ARGW%d=GR", i); \
|
||||
|
|
|
@ -3099,7 +3099,7 @@ rs6000_build_va_list ()
|
|||
|
||||
void
|
||||
rs6000_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p;
|
||||
int stdarg_p ATTRIBUTE_UNUSED;
|
||||
tree valist;
|
||||
rtx nextarg;
|
||||
{
|
||||
|
@ -3110,7 +3110,7 @@ rs6000_va_start (stdarg_p, valist, nextarg)
|
|||
/* Only SVR4 needs something special. */
|
||||
if (DEFAULT_ABI != ABI_V4)
|
||||
{
|
||||
std_expand_builtin_va_start (stdarg_p, valist, nextarg);
|
||||
std_expand_builtin_va_start (1, valist, nextarg);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -3201,8 +3201,7 @@ s390_frame_info (frame)
|
|||
if (! current_function_is_leaf
|
||||
|| frame->frame_size > 0
|
||||
|| current_function_calls_alloca
|
||||
|| current_function_stdarg
|
||||
|| current_function_varargs)
|
||||
|| current_function_stdarg)
|
||||
frame->frame_size += STARTING_FRAME_OFFSET;
|
||||
|
||||
/* If we need to allocate a frame, the stack pointer is changed. */
|
||||
|
@ -3260,7 +3259,7 @@ s390_frame_info (frame)
|
|||
frame->return_reg_saved_p = (j >= RETURN_REGNUM && i <= RETURN_REGNUM);
|
||||
}
|
||||
|
||||
if (current_function_stdarg || current_function_varargs)
|
||||
if (current_function_stdarg)
|
||||
{
|
||||
/* Varargs function need to save from gpr 2 to gpr 15. */
|
||||
frame->first_save_gpr = 2;
|
||||
|
@ -3435,7 +3434,7 @@ s390_emit_prologue ()
|
|||
|
||||
/* Save fprs for variable args. */
|
||||
|
||||
if (current_function_stdarg || current_function_varargs)
|
||||
if (current_function_stdarg)
|
||||
{
|
||||
/* Save fpr 0 and 2. */
|
||||
|
||||
|
@ -3950,9 +3949,8 @@ s390_build_va_list ()
|
|||
}
|
||||
|
||||
/* Implement va_start by filling the va_list structure VALIST.
|
||||
STDARG_P is true if implementing __builtin_stdarg_va_start,
|
||||
false if implementing __builtin_varargs_va_start. NEXTARG
|
||||
points to the first anonymous stack argument.
|
||||
STDARG_P is always true, and ignored.
|
||||
NEXTARG points to the first anonymous stack argument.
|
||||
|
||||
The following global variables are used to initialize
|
||||
the va_list structure:
|
||||
|
@ -3965,7 +3963,7 @@ s390_build_va_list ()
|
|||
|
||||
void
|
||||
s390_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p;
|
||||
int stdarg_p ATTRIBUTE_UNUSED;
|
||||
tree valist;
|
||||
rtx nextarg ATTRIBUTE_UNUSED;
|
||||
{
|
||||
|
@ -4003,8 +4001,6 @@ s390_va_start (stdarg_p, valist, nextarg)
|
|||
|
||||
off = INTVAL (current_function_arg_offset_rtx);
|
||||
off = off < 0 ? 0 : off;
|
||||
if (! stdarg_p)
|
||||
off = off > 0 ? off - UNITS_PER_WORD : off;
|
||||
if (TARGET_DEBUG_ARG)
|
||||
fprintf (stderr, "va_start: n_gpr = %d, n_fpr = %d off %d\n",
|
||||
(int)n_gpr, (int)n_fpr, off);
|
||||
|
|
|
@ -4567,7 +4567,7 @@ sh_expand_prologue ()
|
|||
}
|
||||
|
||||
/* Emit the code for SETUP_VARARGS. */
|
||||
if (current_function_varargs || current_function_stdarg)
|
||||
if (current_function_stdarg)
|
||||
{
|
||||
/* This is not used by the SH3E calling convention */
|
||||
if (TARGET_SH1 && ! TARGET_SH3E && ! TARGET_SH5 && ! TARGET_HITACHI)
|
||||
|
@ -5261,7 +5261,7 @@ sh_build_va_list ()
|
|||
|
||||
void
|
||||
sh_va_start (stdarg_p, valist, nextarg)
|
||||
int stdarg_p;
|
||||
int stdarg_p ATTRIBUTE_UNUSED;
|
||||
tree valist;
|
||||
rtx nextarg;
|
||||
{
|
||||
|
@ -5273,20 +5273,13 @@ sh_va_start (stdarg_p, valist, nextarg)
|
|||
if (TARGET_SH5)
|
||||
{
|
||||
expand_builtin_saveregs ();
|
||||
/* When the varargs dummy argument is ``passed'' on a register,
|
||||
we don't want std_expand_builtin_va_start() to apply any
|
||||
correction for it, so set stdarg_p so as to pretend there's
|
||||
no such dummy argument. */
|
||||
if (current_function_args_info.arg_count[(int) SH_ARG_INT]
|
||||
< NPARM_REGS (SImode))
|
||||
stdarg_p = 1;
|
||||
std_expand_builtin_va_start (stdarg_p, valist, nextarg);
|
||||
std_expand_builtin_va_start (1, valist, nextarg);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI)
|
||||
{
|
||||
std_expand_builtin_va_start (stdarg_p, valist, nextarg);
|
||||
std_expand_builtin_va_start (1, valist, nextarg);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -5338,11 +5331,6 @@ sh_va_start (stdarg_p, valist, nextarg)
|
|||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
u = make_tree (ptr_type_node, nextarg);
|
||||
if (! stdarg_p && (nint == 0 || nfp == 0))
|
||||
{
|
||||
u = fold (build (PLUS_EXPR, ptr_type_node, u,
|
||||
build_int_2 (-UNITS_PER_WORD, -1)));
|
||||
}
|
||||
t = build (MODIFY_EXPR, ptr_type_node, next_stack, u);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
|
|
@ -1846,8 +1846,7 @@ struct sh_args {
|
|||
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
|
||||
((! TARGET_SH5 \
|
||||
&& PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
|
||||
&& ((NAMED) \
|
||||
|| (! TARGET_HITACHI && (TARGET_SH3E || ! current_function_varargs)))) \
|
||||
&& ((NAMED) || !TARGET_HITACHI)) \
|
||||
? gen_rtx_REG ((MODE), \
|
||||
((BASE_ARG_REG (MODE) + ROUND_REG ((CUM), (MODE))) \
|
||||
^ ((MODE) == SFmode && TARGET_SH4 \
|
||||
|
@ -2010,7 +2009,7 @@ struct sh_args {
|
|||
later. Fortunately, we already have two flags that are part of struct
|
||||
function that tell if a function uses varargs or stdarg. */
|
||||
#define SETUP_INCOMING_VARARGS(ASF, MODE, TYPE, PAS, ST) do \
|
||||
if (! current_function_varargs && ! current_function_stdarg) \
|
||||
if (! current_function_stdarg) \
|
||||
abort (); \
|
||||
while (0)
|
||||
|
||||
|
|
|
@ -1097,7 +1097,6 @@ extern int sparc_mode_class[];
|
|||
#define FRAME_POINTER_REQUIRED \
|
||||
(TARGET_FLAT \
|
||||
? (current_function_calls_alloca \
|
||||
|| current_function_varargs \
|
||||
|| !leaf_function_p ()) \
|
||||
: ! (leaf_function_p () && only_leaf_regs_used ()))
|
||||
|
||||
|
|
|
@ -874,7 +874,7 @@ xstormy16_compute_stack_layout ()
|
|||
if (REG_NEEDS_SAVE (regno, ifun))
|
||||
layout.register_save_size += UNITS_PER_WORD;
|
||||
|
||||
if (current_function_varargs || current_function_stdarg)
|
||||
if (current_function_stdarg)
|
||||
layout.stdarg_save_size = NUM_ARGUMENT_REGISTERS * UNITS_PER_WORD;
|
||||
else
|
||||
layout.stdarg_save_size = 0;
|
||||
|
|
|
@ -6923,14 +6923,13 @@ Do not include extra scratch space in floating point data blocks. This
|
|||
results in smaller code, but slower execution, since scratch space must
|
||||
be allocated dynamically.
|
||||
|
||||
@cindex @file{varargs.h} and RT PC
|
||||
@cindex @file{stdarg.h} and RT PC
|
||||
@item -mfp-arg-in-fpregs
|
||||
@opindex mfp-arg-in-fpregs
|
||||
Use a calling sequence incompatible with the IBM calling convention in
|
||||
which floating point arguments are passed in floating point registers.
|
||||
Note that @code{varargs.h} and @code{stdarg.h} will not work with
|
||||
floating point operands if this option is specified.
|
||||
Note that @code{stdarg.h} will not work with floating point operands
|
||||
if this option is specified.
|
||||
|
||||
@item -mfp-arg-in-gregs
|
||||
@opindex mfp-arg-in-gregs
|
||||
|
|
|
@ -246,8 +246,8 @@ libraries are also installed by GCC; these are not documented here.
|
|||
|
||||
Several of the headers GCC installs are in the @file{ginclude}
|
||||
directory. These headers, @file{iso646.h},
|
||||
@file{stdarg.h}, @file{stdbool.h}, @file{stddef.h} and
|
||||
@file{varargs.h}, are installed in @file{@var{libsubdir}/include},
|
||||
@file{stdarg.h}, @file{stdbool.h}, and @file{stddef.h},
|
||||
are installed in @file{@var{libsubdir}/include},
|
||||
unless the target Makefile fragment (@pxref{Target Fragment})
|
||||
overrides this by setting @code{USER_H}.
|
||||
|
||||
|
|
|
@ -4006,7 +4006,7 @@ arguments. But usually, on such machines, nothing else has been pushed
|
|||
yet, because the function prologue itself does all the pushing.) This
|
||||
region is used on machines where an argument may be passed partly in
|
||||
registers and partly in memory, and, in some cases to support the
|
||||
features in @code{<varargs.h>} and @code{<stdarg.h>}.
|
||||
features in @code{<stdarg.h>}.
|
||||
|
||||
@item
|
||||
An area of memory used to save certain registers used by the function.
|
||||
|
|
|
@ -891,24 +891,6 @@ at its convenience, and moving them into memory truncates them.
|
|||
You can partially avoid this problem by using the @option{-ffloat-store}
|
||||
option (@pxref{Optimize Options}).
|
||||
|
||||
@item
|
||||
On the MIPS, variable argument functions using @file{varargs.h}
|
||||
cannot have a floating point value for the first argument. The
|
||||
reason for this is that in the absence of a prototype in scope,
|
||||
if the first argument is a floating point, it is passed in a
|
||||
floating point register, rather than an integer register.
|
||||
|
||||
If the code is rewritten to use the ISO standard @file{stdarg.h}
|
||||
method of variable arguments, and the prototype is in scope at
|
||||
the time of the call, everything will work fine.
|
||||
|
||||
@item
|
||||
On the H8/300 and H8/300H, variable argument functions must be
|
||||
implemented using the ISO standard @file{stdarg.h} method of
|
||||
variable arguments. Furthermore, calls to functions using @file{stdarg.h}
|
||||
variable arguments must have a prototype for the called function
|
||||
in scope at the time of the call.
|
||||
|
||||
@item
|
||||
On AIX and other platforms without weak symbol support, templates
|
||||
need to be instantiated explicitly and symbols for static members
|
||||
|
|
|
@ -4290,17 +4290,6 @@ assign_parms (fndecl)
|
|||
rtx conversion_insns = 0;
|
||||
struct args_size alignment_pad;
|
||||
|
||||
/* Nonzero if the last arg is named `__builtin_va_alist',
|
||||
which is used on some machines for old-fashioned non-ANSI varargs.h;
|
||||
this should be stuck onto the stack as if it had arrived there. */
|
||||
int hide_last_arg
|
||||
= (current_function_varargs
|
||||
&& fnargs
|
||||
&& (parm = tree_last (fnargs)) != 0
|
||||
&& DECL_NAME (parm)
|
||||
&& (! strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
|
||||
"__builtin_va_alist")));
|
||||
|
||||
/* Nonzero if function takes extra anonymous args.
|
||||
This means the last named arg must be on the stack
|
||||
right before the anonymous ones. */
|
||||
|
@ -4369,7 +4358,7 @@ assign_parms (fndecl)
|
|||
|
||||
/* Set LAST_NAMED if this is last named arg before last
|
||||
anonymous args. */
|
||||
if (stdarg || current_function_varargs)
|
||||
if (stdarg)
|
||||
{
|
||||
tree tem;
|
||||
|
||||
|
@ -4397,11 +4386,6 @@ assign_parms (fndecl)
|
|||
continue;
|
||||
}
|
||||
|
||||
/* For varargs.h function, save info about regs and stack space
|
||||
used by the individual args, not including the va_alist arg. */
|
||||
if (hide_last_arg && last_named)
|
||||
current_function_args_info = args_so_far;
|
||||
|
||||
/* Find mode of arg as it is passed, and mode of arg
|
||||
as it should be during execution of this function. */
|
||||
passed_mode = TYPE_MODE (passed_type);
|
||||
|
@ -5125,8 +5109,7 @@ assign_parms (fndecl)
|
|||
/* For stdarg.h function, save info about
|
||||
regs and stack space used by the named args. */
|
||||
|
||||
if (!hide_last_arg)
|
||||
current_function_args_info = args_so_far;
|
||||
current_function_args_info = args_so_far;
|
||||
|
||||
/* Set the rtx used for the function return value. Put this in its
|
||||
own variable so any optimizers that need this information don't have
|
||||
|
@ -6278,8 +6261,7 @@ prepare_function_start ()
|
|||
/* Indicate we have no need of a frame pointer yet. */
|
||||
frame_pointer_needed = 0;
|
||||
|
||||
/* By default assume not varargs or stdarg. */
|
||||
current_function_varargs = 0;
|
||||
/* By default assume not stdarg. */
|
||||
current_function_stdarg = 0;
|
||||
|
||||
/* We haven't made any trampolines for this function yet. */
|
||||
|
@ -6379,15 +6361,6 @@ init_function_for_compilation ()
|
|||
VARRAY_GROW (sibcall_epilogue, 0);
|
||||
}
|
||||
|
||||
/* Indicate that the current function uses extra args
|
||||
not explicitly mentioned in the argument list in any fashion. */
|
||||
|
||||
void
|
||||
mark_varargs ()
|
||||
{
|
||||
current_function_varargs = 1;
|
||||
}
|
||||
|
||||
/* Expand a call to __main at the beginning of a possible main function. */
|
||||
|
||||
#if defined(INIT_SECTION_ASM_OP) && !defined(INVOKE__main)
|
||||
|
|
|
@ -451,12 +451,7 @@ struct function GTY(())
|
|||
function. */
|
||||
unsigned int limit_stack : 1;
|
||||
|
||||
/* Nonzero if current function uses varargs.h or equivalent.
|
||||
Zero for functions that use stdarg.h. */
|
||||
unsigned int varargs : 1;
|
||||
|
||||
/* Nonzero if current function uses stdarg.h or equivalent.
|
||||
Zero for functions that use varargs.h. */
|
||||
/* Nonzero if current function uses stdarg.h or equivalent. */
|
||||
unsigned int stdarg : 1;
|
||||
|
||||
/* Nonzero if this function is being processed in function-at-a-time
|
||||
|
@ -525,7 +520,6 @@ extern int virtuals_instantiated;
|
|||
#define current_function_pretend_args_size (cfun->pretend_args_size)
|
||||
#define current_function_outgoing_args_size (cfun->outgoing_args_size)
|
||||
#define current_function_arg_offset_rtx (cfun->arg_offset_rtx)
|
||||
#define current_function_varargs (cfun->varargs)
|
||||
#define current_function_stdarg (cfun->stdarg)
|
||||
#define current_function_internal_arg_pointer (cfun->internal_arg_pointer)
|
||||
#define current_function_return_rtx (cfun->return_rtx)
|
||||
|
|
|
@ -47,18 +47,13 @@ typedef __builtin_va_list __gnuc_va_list;
|
|||
if this invocation was from the user program. */
|
||||
#ifdef _STDARG_H
|
||||
|
||||
/* Note that the type used in va_arg is supposed to match the
|
||||
actual type **after default promotions**.
|
||||
Thus, va_arg (..., short) is not valid. */
|
||||
|
||||
#define va_start(v,l) __builtin_stdarg_start((v),l)
|
||||
#define va_end __builtin_va_end
|
||||
#define va_arg __builtin_va_arg
|
||||
#define va_start(v,l) __builtin_va_start(v,l)
|
||||
#define va_end(v) __builtin_va_end(v)
|
||||
#define va_arg(v,l) __builtin_va_arg(v,l)
|
||||
#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L
|
||||
#define va_copy(d,s) __builtin_va_copy((d),(s))
|
||||
#define va_copy(d,s) __builtin_va_copy(d,s)
|
||||
#endif
|
||||
#define __va_copy(d,s) __builtin_va_copy((d),(s))
|
||||
|
||||
#define __va_copy(d,s) __builtin_va_copy(d,s)
|
||||
|
||||
/* Define va_list, if desired, from __gnuc_va_list. */
|
||||
/* We deliberately do not define va_list when called from
|
||||
|
|
|
@ -1,144 +1,7 @@
|
|||
/* Copyright (C) 1989, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU CC.
|
||||
|
||||
GNU CC is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU CC is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU CC; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* As a special exception, if you include this header file into source
|
||||
files compiled by GCC, this header file does not by itself cause
|
||||
the resulting executable to be covered by the GNU General Public
|
||||
License. This exception does not however invalidate any other
|
||||
reasons why the executable file might be covered by the GNU General
|
||||
Public License. */
|
||||
|
||||
#ifndef _VARARGS_H
|
||||
#define _VARARGS_H
|
||||
|
||||
#ifdef __NeXT__
|
||||
#error "GCC no longer implements <varargs.h>."
|
||||
#error "Revise your code to use <stdarg.h>."
|
||||
|
||||
/* On Next, erase any vestiges of stdarg.h. */
|
||||
|
||||
#ifdef _ANSI_STDARG_H_
|
||||
#define _VA_LIST_
|
||||
#endif
|
||||
#define _ANSI_STDARG_H_
|
||||
|
||||
#undef va_alist
|
||||
#undef va_dcl
|
||||
#undef va_list
|
||||
#undef va_start
|
||||
#undef va_end
|
||||
#undef va_arg
|
||||
#endif /* __NeXT__ */
|
||||
|
||||
/* These macros implement traditional (non-ANSI) varargs
|
||||
for GNU C. */
|
||||
|
||||
#define va_alist __builtin_va_alist
|
||||
|
||||
/* ??? We don't process attributes correctly in K&R argument context. */
|
||||
typedef int __builtin_va_alist_t __attribute__((__mode__(__word__)));
|
||||
|
||||
/* ??? It would be nice to get rid of the ellipsis here. It causes
|
||||
current_function_varargs to be set in cc1. */
|
||||
#define va_dcl __builtin_va_alist_t __builtin_va_alist; ...
|
||||
|
||||
/* Define __gnuc_va_list, just as in stdarg.h. */
|
||||
|
||||
#ifndef __GNUC_VA_LIST
|
||||
#define __GNUC_VA_LIST
|
||||
typedef __builtin_va_list __gnuc_va_list;
|
||||
#endif
|
||||
|
||||
#define va_start(v) __builtin_varargs_start((v))
|
||||
#define va_end __builtin_va_end
|
||||
#define va_arg __builtin_va_arg
|
||||
#define __va_copy(d,s) __builtin_va_copy((d),(s))
|
||||
|
||||
/* Define va_list from __gnuc_va_list. */
|
||||
|
||||
#ifdef _HIDDEN_VA_LIST /* On OSF1, this means varargs.h is "half-loaded". */
|
||||
#undef _VA_LIST
|
||||
#endif
|
||||
|
||||
#if defined(__svr4__) || (defined(_SCO_DS) && !defined(__VA_LIST))
|
||||
/* SVR4.2 uses _VA_LIST for an internal alias for va_list,
|
||||
so we must avoid testing it and setting it here.
|
||||
SVR4 uses _VA_LIST as a flag in stdarg.h, but we should
|
||||
have no conflict with that. */
|
||||
#ifndef _VA_LIST_
|
||||
#define _VA_LIST_
|
||||
#ifdef __i860__
|
||||
#ifndef _VA_LIST
|
||||
#define _VA_LIST va_list
|
||||
#endif
|
||||
#endif /* __i860__ */
|
||||
typedef __gnuc_va_list va_list;
|
||||
#ifdef _SCO_DS
|
||||
#define __VA_LIST
|
||||
#endif
|
||||
#endif /* _VA_LIST_ */
|
||||
|
||||
#else /* not __svr4__ || _SCO_DS */
|
||||
|
||||
/* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
|
||||
But on BSD NET2 we must not test or define or undef it.
|
||||
(Note that the comments in NET 2's ansi.h
|
||||
are incorrect for _VA_LIST_--see stdio.h!) */
|
||||
/* Michael Eriksson <mer@sics.se> at Thu Sep 30 11:00:57 1993:
|
||||
Sequent defines _VA_LIST_ in <machine/machtypes.h> to be the type to
|
||||
use for va_list (``typedef _VA_LIST_ va_list'') */
|
||||
#if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT)
|
||||
/* The macro _VA_LIST_DEFINED is used in Windows NT 3.5 */
|
||||
#ifndef _VA_LIST_DEFINED
|
||||
/* The macro _VA_LIST is used in SCO Unix 3.2. */
|
||||
#ifndef _VA_LIST
|
||||
/* The macro _VA_LIST_T_H is used in the Bull dpx2 */
|
||||
#ifndef _VA_LIST_T_H
|
||||
/* The macro __va_list__ is used by BeOS. */
|
||||
#ifndef __va_list__
|
||||
typedef __gnuc_va_list va_list;
|
||||
#endif /* not __va_list__ */
|
||||
#endif /* not _VA_LIST_T_H */
|
||||
#endif /* not _VA_LIST */
|
||||
#endif /* not _VA_LIST_DEFINED */
|
||||
#if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__))
|
||||
#define _VA_LIST_
|
||||
#endif
|
||||
#ifndef _VA_LIST
|
||||
#define _VA_LIST
|
||||
#endif
|
||||
#ifndef _VA_LIST_DEFINED
|
||||
#define _VA_LIST_DEFINED
|
||||
#endif
|
||||
#ifndef _VA_LIST_T_H
|
||||
#define _VA_LIST_T_H
|
||||
#endif
|
||||
#ifndef __va_list__
|
||||
#define __va_list__
|
||||
#endif
|
||||
|
||||
#endif /* not _VA_LIST_, except on certain systems */
|
||||
|
||||
#endif /* not __svr4__ */
|
||||
|
||||
/* The next BSD release (if there is one) wants this symbol to be
|
||||
undefined instead of _VA_LIST_. */
|
||||
#ifdef _BSD_VA_LIST
|
||||
#undef _BSD_VA_LIST
|
||||
#endif
|
||||
|
||||
#endif /* _VARARGS_H */
|
||||
|
|
|
@ -178,8 +178,7 @@ function_cannot_inline_p (fndecl)
|
|||
return N_("function cannot be inline");
|
||||
|
||||
/* No inlines with varargs. */
|
||||
if ((last && TREE_VALUE (last) != void_type_node)
|
||||
|| current_function_varargs)
|
||||
if (last && TREE_VALUE (last) != void_type_node)
|
||||
return N_("varargs function cannot be inline");
|
||||
|
||||
if (current_function_calls_alloca)
|
||||
|
|
|
@ -676,8 +676,7 @@ optimize_sibling_and_tail_recursive_calls ()
|
|||
sibling call optimizations, but not tail recursion.
|
||||
Similarly if we use varargs or stdarg since they implicitly
|
||||
may take the address of an argument. */
|
||||
if (current_function_calls_alloca
|
||||
|| current_function_varargs || current_function_stdarg)
|
||||
if (current_function_calls_alloca || current_function_stdarg)
|
||||
sibcall = 0;
|
||||
|
||||
/* See if there are any reasons we can't perform either sibling or
|
||||
|
|
|
@ -1,9 +1,21 @@
|
|||
2002-07-15 Zack Weinberg <zack@codesourcery.com>
|
||||
|
||||
* c-torture/execute/991216-3.c, c-torture/execute/strct-varg-1.c,
|
||||
c-torture/execute/va-arg-7.c, c-torture/execute/va-arg-8.c,
|
||||
c-torture/execute/va-arg-15.c, c-torture/execute/va-arg-16.c,
|
||||
c-torture/execute/va-arg-17.c, c-torture/execute/va-arg-19.c:
|
||||
Convert to use <stdarg.h>.
|
||||
* c-torture/execute/va-arg-3.c, c-torture/execute/va-arg-3.x:
|
||||
Delete.
|
||||
* gcc.dg/va-arg-2.c: New.
|
||||
* lib/gcc.exp, lib/objc.exp: Remove code to set -DNO_VARARGS.
|
||||
|
||||
2002-07-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gcc.c-torture/compile/20020710-1.c: New test.
|
||||
|
||||
Thu Jul 11 15:39:21 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||
Andrew Pinski <pinskia@physics.uc.edu>
|
||||
Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
||||
gcc.c-torture/compile/simd-2.c: New testcase.
|
||||
gcc.c-torture/compile/simd-3.c: Likewise.
|
||||
|
@ -12,7 +24,7 @@ Thu Jul 11 15:39:21 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
|
||||
PR c++/7224
|
||||
* g++.dg/overload/error1.C: New test.
|
||||
|
||||
|
||||
2002-07-11 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
|
||||
|
||||
* gcc.misc-tests/linkage.exp: Handle mips-sgi-irix6*o32
|
||||
|
@ -28,13 +40,13 @@ Thu Jul 11 15:39:21 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
|
||||
2002-07-10 Jeffrey A Law <law@redhat.com>
|
||||
|
||||
* gcc.c-torture/compile/981006-1.x: Do not use -fpic for mn102.
|
||||
* gcc.c-torture/compile/981006-1.x: Do not use -fpic for mn102.
|
||||
|
||||
* gcc.c-torture/compile/930326-1.x: Remove. No longer needed.
|
||||
* gcc.c-torture/compile/930326-1.x: Remove. No longer needed.
|
||||
|
||||
2002-07-09 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* gcc.dg/20020312-2.c: Check for __PPC__.
|
||||
* gcc.dg/20020312-2.c: Check for __PPC__.
|
||||
|
||||
2002-07-09 Diego Novillo <dnovillo@redhat.com>
|
||||
|
||||
|
@ -57,7 +69,7 @@ Thu Jul 11 15:39:21 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
2002-07-05 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
PR c++/7099
|
||||
* g++.dg/warn/noreturn1.C: New test.
|
||||
* g++.dg/warn/noreturn1.C: New test.
|
||||
|
||||
2002-07-03 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
|
@ -168,8 +180,8 @@ Mon Jul 1 12:51:05 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
|
||||
2002-06-27 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* gcc.c-torture/execute/string-opt-8.c (strncmp): Fix typo in
|
||||
return type.
|
||||
* gcc.c-torture/execute/string-opt-8.c (strncmp): Fix typo in
|
||||
return type.
|
||||
|
||||
Thu Jun 27 15:23:21 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||
|
||||
|
@ -269,9 +281,9 @@ Tue Jun 25 21:50:38 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
|
||||
2002-06-18 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* gcc.c-torture/execute/simd-1.c: New.
|
||||
* gcc.c-torture/execute/simd-1.c: New.
|
||||
|
||||
* gcc.dg/simd-1.c: New.
|
||||
* gcc.dg/simd-1.c: New.
|
||||
|
||||
2002-06-18 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
|
@ -355,7 +367,7 @@ Tue Jun 25 21:50:38 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
|||
|
||||
2002-06-04 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* gcc.dg/altivec-2.c: Remove test for invalid vector type V2DF.
|
||||
* gcc.dg/altivec-2.c: Remove test for invalid vector type V2DF.
|
||||
|
||||
2002-06-03 Richard Henderson <rth@redhat.com>
|
||||
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
#include <varargs.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#define VALUE 0x123456789abcdefLL
|
||||
#define AFTER 0x55
|
||||
|
||||
void
|
||||
test (va_alist)
|
||||
va_dcl
|
||||
test (int n, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int i, n;
|
||||
int i;
|
||||
|
||||
va_start (ap, n);
|
||||
|
||||
va_start (ap);
|
||||
n = va_arg (ap, int);
|
||||
for (i = 2; i <= n; i++)
|
||||
{
|
||||
if (va_arg (ap, int) != i)
|
||||
|
|
|
@ -1,28 +1,14 @@
|
|||
#ifdef NO_VARARGS
|
||||
#include <stdarg.h>
|
||||
#define va_alist int x_attr, ...
|
||||
#define va_dcl
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
|
||||
struct s { int x, y; };
|
||||
|
||||
f (va_alist)
|
||||
va_dcl
|
||||
f (int attr, ...)
|
||||
{
|
||||
struct s va_values;
|
||||
va_list va;
|
||||
int attr;
|
||||
int i;
|
||||
|
||||
#ifdef NO_VARARGS
|
||||
va_start (va, x_attr);
|
||||
attr = x_attr;
|
||||
#else
|
||||
va_start (va);
|
||||
attr = va_arg (va, int);
|
||||
#endif
|
||||
va_start (va, attr);
|
||||
|
||||
if (attr != 2)
|
||||
abort ();
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
#include <varargs.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
void vafunction (dummy, va_alist)
|
||||
char *dummy;
|
||||
va_dcl
|
||||
void vafunction (char *dummy, ...)
|
||||
{
|
||||
double darg;
|
||||
int iarg;
|
||||
|
@ -10,7 +8,7 @@ void vafunction (dummy, va_alist)
|
|||
int i;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap);
|
||||
va_start(ap, dummy);
|
||||
for (i = 1; i <= 18; i++, flag++)
|
||||
{
|
||||
if (flag & 1)
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
#include <varargs.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
typedef double TYPE;
|
||||
|
||||
void vafunction (dummy1, dummy2, va_alist)
|
||||
TYPE dummy1, dummy2;
|
||||
va_dcl
|
||||
void vafunction (TYPE dummy1, TYPE dummy2, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap);
|
||||
va_start(ap, dummy2);
|
||||
if (dummy1 != 888.)
|
||||
abort();
|
||||
if (dummy2 != 999.)
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
#include <varargs.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
typedef double TYPE;
|
||||
|
||||
void vafunction (dummy, va_alist)
|
||||
char *dummy;
|
||||
va_dcl
|
||||
void vafunction (char *dummy, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap);
|
||||
va_start(ap, dummy);
|
||||
if (va_arg (ap, TYPE) != 1.)
|
||||
abort();
|
||||
if (va_arg (ap, TYPE) != 2.)
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
#include <varargs.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
typedef int TYPE;
|
||||
|
||||
void vafunction (dummy, va_alist)
|
||||
char *dummy;
|
||||
va_dcl
|
||||
void vafunction (char *dummy, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap);
|
||||
va_start(ap, dummy);
|
||||
if (va_arg (ap, TYPE) != 1)
|
||||
abort();
|
||||
if (va_arg (ap, TYPE) != 2)
|
||||
|
|
|
@ -1,339 +0,0 @@
|
|||
/* Same as va-arg-2.c but using varargs.h. */
|
||||
/* The purpose of this test is to catch edge cases when arguments are passed
|
||||
in regs and on the stack. We test 16 cases, trying to catch multiple
|
||||
targets (some use 3 regs for argument passing, some use 12, etc.).
|
||||
We test both the arguments and the `lastarg' (the argument to va_start). */
|
||||
|
||||
#ifdef NO_VARARGS
|
||||
int main()
|
||||
{
|
||||
exit (0);
|
||||
}
|
||||
|
||||
#else
|
||||
#include <varargs.h>
|
||||
|
||||
extern __SIZE_TYPE__ strlen ();
|
||||
|
||||
int
|
||||
to_hex (unsigned int a)
|
||||
{
|
||||
static char hex[] = "0123456789abcdef";
|
||||
|
||||
if (a > 15)
|
||||
abort ();
|
||||
return hex[a];
|
||||
}
|
||||
|
||||
void
|
||||
f0 (va_alist)
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 0)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f1 (a1, va_alist)
|
||||
int a1;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 1)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f2 (a1, a2, va_alist)
|
||||
int a1, a2;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 2)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f3 (a1, a2, a3, va_alist)
|
||||
int a1, a2, a3;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 3)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f4 (a1, a2, a3, a4, va_alist)
|
||||
int a1, a2, a3, a4;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 4)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f5 (a1, a2, a3, a4, a5, va_alist)
|
||||
int a1, a2, a3, a4, a5;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 5)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f6 (a1, a2, a3, a4, a5, a6, va_alist)
|
||||
int a1, a2, a3, a4, a5, a6;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 6)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f7 (a1, a2, a3, a4, a5, a6, a7, va_alist)
|
||||
int a1, a2, a3, a4, a5, a6, a7;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 7)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f8 (a1, a2, a3, a4, a5, a6, a7, a8, va_alist)
|
||||
int a1, a2, a3, a4, a5, a6, a7, a8;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 8)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f9 (a1, a2, a3, a4, a5, a6, a7, a8, a9, va_alist)
|
||||
int a1, a2, a3, a4, a5, a6, a7, a8, a9;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 9)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f10 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, va_alist)
|
||||
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 10)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f11 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,
|
||||
va_alist)
|
||||
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 11)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f12 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, va_alist)
|
||||
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 12)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f13 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, va_alist)
|
||||
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 13)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f14 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, va_alist)
|
||||
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 14)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
f15 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, va_alist)
|
||||
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15;
|
||||
va_dcl
|
||||
{
|
||||
va_list ap;
|
||||
char *format;
|
||||
|
||||
va_start (ap);
|
||||
format = va_arg (ap, char *);
|
||||
if (strlen (format) != 16 - 15)
|
||||
abort ();
|
||||
while (*format)
|
||||
if (*format++ != to_hex (va_arg (ap, int)))
|
||||
abort ();
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
main ()
|
||||
{
|
||||
char *f = "0123456789abcdef";
|
||||
|
||||
f0 (f+0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
f1 (0, f+1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
f2 (0, 1, f+2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
f3 (0, 1, 2, f+3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
f4 (0, 1, 2, 3, f+4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
f5 (0, 1, 2, 3, 4, f+5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
f6 (0, 1, 2, 3, 4, 5, f+6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
f7 (0, 1, 2, 3, 4, 5, 6, f+7, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
f8 (0, 1, 2, 3, 4, 5, 6, 7, f+8, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
f9 (0, 1, 2, 3, 4, 5, 6, 7, 8, f+9, 9, 10, 11, 12, 13, 14, 15);
|
||||
f10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f+10, 10, 11, 12, 13, 14, 15);
|
||||
f11 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f+11, 11, 12, 13, 14, 15);
|
||||
f12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f+12, 12, 13, 14, 15);
|
||||
f13 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f+13, 13, 14, 15);
|
||||
f14 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f+14, 14, 15);
|
||||
f15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f+15, 15);
|
||||
|
||||
exit (0);
|
||||
}
|
||||
#endif /* ! NO_VARARGS */
|
|
@ -1,12 +0,0 @@
|
|||
# This doesn't work on mn10200
|
||||
|
||||
if { [istarget "mn10200*-*-*"] } {
|
||||
set torture_execute_xfail "mn10200*-*-*"
|
||||
}
|
||||
|
||||
if { [istarget "h8300*-*-*"] } {
|
||||
set torture_execute_xfail "h8300*-*-*"
|
||||
}
|
||||
|
||||
|
||||
return 0
|
|
@ -1,16 +1,15 @@
|
|||
/* Origin: Franz Sirl <Franz.Sirl-kernel@lauterbach.com> */
|
||||
|
||||
#include <varargs.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
inline void
|
||||
debug(i1, i2, i3, i4, i5, i6, i7, f1, f2, f3, f4, f5, f6, f7, f8, f9, va_alist)
|
||||
int i1, i2, i3, i4, i5, i6, i7;
|
||||
double f1, f2, f3, f4, f5, f6, f7, f8, f9;
|
||||
va_dcl
|
||||
debug(int i1, int i2, int i3, int i4, int i5, int i6, int i7,
|
||||
double f1, double f2, double f3, double f4, double f5,
|
||||
double f6, double f7, double f8, double f9, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start (ap);
|
||||
va_start (ap, f9);
|
||||
|
||||
if (va_arg (ap,int) != 8)
|
||||
abort ();
|
||||
|
@ -25,7 +24,8 @@ debug(i1, i2, i3, i4, i5, i6, i7, f1, f2, f3, f4, f5, f6, f7, f8, f9, va_alist)
|
|||
int
|
||||
main(void)
|
||||
{
|
||||
debug (1, 2, 3, 4, 5, 6, 7, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0,
|
||||
8.0, 9.0, 8, 9, 10);
|
||||
debug (1, 2, 3, 4, 5, 6, 7,
|
||||
1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0,
|
||||
8, 9, 10);
|
||||
exit (0);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Origin: Franz Sirl <Franz.Sirl-kernel@lauterbach.com> */
|
||||
|
||||
#include <varargs.h>
|
||||
#include <stdarg.h>
|
||||
#include <limits.h>
|
||||
|
||||
#if __LONG_LONG_MAX__ == 9223372036854775807LL
|
||||
|
@ -8,13 +8,12 @@
|
|||
typedef long long int INT64;
|
||||
|
||||
inline void
|
||||
debug(i1, i2, i3, i4, i5, i6, i7, i8, i9, va_alist)
|
||||
int i1, i2, i3, i4, i5, i6, i7, i8, i9;
|
||||
va_dcl
|
||||
debug(int i1, int i2, int i3, int i4, int i5,
|
||||
int i6, int i7, int i8, int i9, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start (ap);
|
||||
va_start (ap, i9);
|
||||
|
||||
if (va_arg (ap,int) != 10)
|
||||
abort ();
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
/* <varargs.h> is not supported anymore, but we do install a stub
|
||||
file which issues an #error telling the user to convert their code. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <varargs.h> /* { dg-bogus "varargs.h" "missing file" } */
|
||||
|
||||
/* { dg-error "" "In file included from" { target *-*-* } 6 } */
|
||||
/* { dg-error "no longer implements" "#error 1" { target *-*-* } 4 } */
|
||||
/* { dg-error "Revise your code" "#error 2" { target *-*-* } 5 } */
|
||||
|
||||
int x; /* prevent empty-source-file warning */
|
|
@ -149,9 +149,6 @@ proc gcc_target_compile { source dest type options } {
|
|||
if [info exists TOOL_OPTIONS] {
|
||||
lappend options "additional_flags=$TOOL_OPTIONS"
|
||||
}
|
||||
if [target_info exists gcc,no_varargs] {
|
||||
lappend options "additional_flags=-DNO_VARARGS"
|
||||
}
|
||||
if [target_info exists gcc,timeout] {
|
||||
lappend options "timeout=[target_info gcc,timeout]"
|
||||
}
|
||||
|
|
|
@ -165,9 +165,6 @@ proc objc_target_compile { source dest type options } {
|
|||
if [info exists TOOL_OPTIONS] {
|
||||
lappend options "additional_flags=$TOOL_OPTIONS"
|
||||
}
|
||||
if [target_info exists objc,no_varargs] {
|
||||
lappend options "additional_flags=-DNO_VARARGS"
|
||||
}
|
||||
|
||||
# Point to the ObjC headers in libobjc.
|
||||
set objc_include_dir "${srcdir}/../../libobjc"
|
||||
|
|
|
@ -2899,7 +2899,6 @@ extern void build_common_tree_nodes_2 PARAMS ((int));
|
|||
extern void setjmp_protect_args PARAMS ((void));
|
||||
extern void setjmp_protect PARAMS ((tree));
|
||||
extern void expand_main_function PARAMS ((void));
|
||||
extern void mark_varargs PARAMS ((void));
|
||||
extern void init_dummy_function_start PARAMS ((void));
|
||||
extern void expand_dummy_function_end PARAMS ((void));
|
||||
extern void init_function_for_compilation PARAMS ((void));
|
||||
|
|
Loading…
Reference in New Issue