From 027b4a722d9dde6d452652203d090412dba76aa5 Mon Sep 17 00:00:00 2001 From: Michael Meissner Date: Wed, 9 Sep 1992 14:12:07 +0000 Subject: [PATCH] Fix va_arg for structures larger than 8 bytes. From-SVN: r2089 --- gcc/ginclude/va-mips.h | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/gcc/ginclude/va-mips.h b/gcc/ginclude/va-mips.h index f43222538cf..4222f8bf203 100644 --- a/gcc/ginclude/va-mips.h +++ b/gcc/ginclude/va-mips.h @@ -29,29 +29,31 @@ typedef char * __gnuc_va_list; #define __va_ellipsis #endif -#define __va_rounded_size(TYPE) \ - (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) +#define __va_rounded_size(__TYPE) \ + (((sizeof (__TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) #ifdef _STDARG_H -#define va_start(AP, LASTARG) \ - (AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG))) +#define va_start(__AP, __LASTARG) \ + (__AP = ((char *) &(__LASTARG) + __va_rounded_size (__LASTARG))) + #else #define va_alist __builtin_va_alist #define va_dcl int __builtin_va_alist; __va_ellipsis -#define va_start(AP) AP = (char *) &__builtin_va_alist +#define va_start(__AP) __AP = (char *) &__builtin_va_alist #endif void va_end (__gnuc_va_list); /* Defined in libgcc.a */ -#define va_end(AP) +#define va_end(__AP) #ifdef lint /* complains about constant in conditional context */ -#define va_arg(list, mode) ((mode *)(list += sizeof(mode)))[-1] +#define va_arg(list, mode) ((mode *)(list += __va_rounded_size(mode)))[-1] #else /* !lint */ -#define va_arg(AP, mode) \ - ((mode *)(AP = (char *) (__alignof(mode) > 4 \ - ? ((int)AP + 2*8 - 1) & -8 \ - : ((int)AP + 2*4 - 1) & -4)))[-1] +#define va_arg(__AP, __type) \ + ((__type *)(__AP = (char *) ((__alignof(__type) > 4 \ + ? ((int)__AP + 8 - 1) & -8 \ + : ((int)__AP + 4 - 1) & -4) \ + + __va_rounded_size(__type))))[-1] #endif /* lint */ #endif /* defined (_STDARG_H) || defined (_VARARGS_H) */ -- 2.30.2