aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-12-15 18:14:13 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1993-12-15 18:14:13 -0500
commit1f9becfcbe01274dd5a98f551cd432adae05a8b2 (patch)
treed4e582e6352ba17d713794d1a8b02fb6fffcf8b4
parentede575495613c7d0f1332379878dee17cf7f9739 (diff)
downloadgcc-1f9becfcbe01274dd5a98f551cd432adae05a8b2.zip
gcc-1f9becfcbe01274dd5a98f551cd432adae05a8b2.tar.gz
gcc-1f9becfcbe01274dd5a98f551cd432adae05a8b2.tar.bz2
(expand_builtin): Allow __builtin_next_arg to be used in varargs
functions. From-SVN: r6237
-rw-r--r--gcc/expr.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index a6248be..09178a6 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -6936,10 +6936,17 @@ expand_builtin (exp, target, subtarget, mode, ignore)
/* Return the address of the first anonymous stack arg. */
case BUILT_IN_NEXT_ARG:
{
+ tree parm;
tree fntype = TREE_TYPE (current_function_decl);
+ tree fnargs = DECL_ARGUMENTS (current_function_decl);
if (!(TYPE_ARG_TYPES (fntype) != 0
&& (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
- != void_type_node)))
+ != void_type_node))
+ && !(fnargs
+ && (parm = tree_last (fnargs)) != 0
+ && DECL_NAME (parm)
+ && (! strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
+ "__builtin_va_alist"))))
{
error ("`va_start' used in function with fixed args");
return const0_rtx;