From 7644b152a6f6e1282c4e5f564185af6f16d52926 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 14 Apr 1995 23:44:01 +0000 Subject: [PATCH] Reorganize va_arg From-SVN: r9387 --- gcc/ginclude/va-clipper.h | 8 ++++---- gcc/ginclude/va-pa.h | 6 +++--- gcc/ginclude/va-pyr.h | 6 +++--- gcc/ginclude/va-sparc.h | 13 ++++++------- gcc/ginclude/va-spur.h | 12 ++++++------ 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/gcc/ginclude/va-clipper.h b/gcc/ginclude/va-clipper.h index 6a797dc6964..21ddc562885 100644 --- a/gcc/ginclude/va-clipper.h +++ b/gcc/ginclude/va-clipper.h @@ -46,11 +46,11 @@ typedef struct ((AP).__va_ap = ((AP).__va_ap + sizeof (int) - 1) & ~(sizeof (int) - 1))) #define va_arg(AP, TYPE) \ - ((AP).__va_num < 2 && __builtin_classify_type (* (TYPE *)0) < 12 \ + (*((AP).__va_num < 2 && __builtin_classify_type (* (TYPE *)0) < 12 \ ? (__builtin_classify_type (* (TYPE *)0) == 8 \ - ? (*(TYPE *)(AP).__va_reg[2 * (AP).__va_num++ + 1]) \ - : (*(TYPE *)(AP).__va_reg[2 * (AP).__va_num++ ])) \ - : ((AP).__va_num++, __va_round (AP,TYPE), *((TYPE *)((AP).__va_ap))++)) + ? ((TYPE *)(AP).__va_reg[2 * (AP).__va_num++ + 1]) \ + : ((TYPE *)(AP).__va_reg[2 * (AP).__va_num++ ])) \ + : ((AP).__va_num++, __va_round (AP,TYPE), ((TYPE *)((AP).__va_ap))++))) #define va_end(AP) ((void) 0) diff --git a/gcc/ginclude/va-pa.h b/gcc/ginclude/va-pa.h index 467bccedff7..b6b81dd0925 100644 --- a/gcc/ginclude/va-pa.h +++ b/gcc/ginclude/va-pa.h @@ -33,13 +33,13 @@ typedef double *__gnuc_va_list; #endif #define va_arg(AP,TYPE) \ - (sizeof(TYPE) > 8 ? \ + (*(sizeof(TYPE) > 8 ? \ ((AP = (__gnuc_va_list) ((char *)AP - sizeof (int))), \ - (*((TYPE *) (void *) (*((int *) (AP)))))) \ + (((TYPE *) (void *) (*((int *) (AP)))))) \ :((AP = \ (__gnuc_va_list) ((long)((char *)AP - sizeof (TYPE)) \ & (sizeof(TYPE) > 4 ? ~0x7 : ~0x3))), \ - (*((TYPE *) (void *) ((char *)AP + ((8 - sizeof(TYPE)) % 4)))))) + (((TYPE *) (void *) ((char *)AP + ((8 - sizeof(TYPE)) % 4))))))) #ifndef va_end void va_end (__gnuc_va_list); /* Defined in libgcc.a */ diff --git a/gcc/ginclude/va-pyr.h b/gcc/ginclude/va-pyr.h index 6ffd874e2c0..5ad4ba9d763 100644 --- a/gcc/ginclude/va-pyr.h +++ b/gcc/ginclude/va-pyr.h @@ -111,7 +111,7 @@ typedef __va_buf __gnuc_va_list; a warning about increasing the alignment requirement. */ #define va_arg(_AP, _MODE) \ __extension__ \ -({__voidptr *__ap = (__voidptr*)&_AP; \ +(*({__voidptr *__ap = (__voidptr*)&_AP; \ register int __size = sizeof (_MODE); \ register int __onstack = \ (__size > 8 || ( (int)(__ap[2]) > 11) || \ @@ -121,8 +121,8 @@ __extension__ \ ((void *)__ap[__onstack])+=__size; \ if (__onstack==0 || (int)(__ap[2])==11) \ __ap[2]+= (__size >> 2); \ - *(( _MODE *) (void *) __param_addr); \ -}) + (( _MODE *) (void *) __param_addr); \ +})) void va_end (__gnuc_va_list); /* Defined in libgcc.a */ #define va_end(_X) ((void)0) diff --git a/gcc/ginclude/va-sparc.h b/gcc/ginclude/va-sparc.h index 3df289c0f09..525420a96e4 100644 --- a/gcc/ginclude/va-sparc.h +++ b/gcc/ginclude/va-sparc.h @@ -132,7 +132,7 @@ enum __va_type_classes { #define va_arg(pvar,TYPE) \ __extension__ \ -({int __type = __builtin_classify_type (* (TYPE *) 0); \ +(*({int __type = __builtin_classify_type (* (TYPE *) 0); \ void * __result; \ if (__type == __real_type_class) /* float? */ \ { \ @@ -170,7 +170,7 @@ __extension__ \ __r = (void **) pvar.__va_next_stack++; \ __result = *__r; \ } \ - *(TYPE *) __result;}) + (TYPE *) __result;})) #else /* not __sparc_v9__ */ @@ -184,18 +184,17 @@ __extension__ \ The casts to char * avoid warnings about invalid pointer arithmetic. */ #define va_arg(pvar,TYPE) \ __extension__ \ -({ TYPE __va_temp; \ - ((__builtin_classify_type (__va_temp) >= __record_type_class) \ +(*({((__builtin_classify_type (*(TYPE*) 0) >= __record_type_class) \ ? ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE *), \ - **(TYPE **) (void *) ((char *)(pvar) - __va_rounded_size (TYPE *))) \ + *(TYPE **) (void *) ((char *)(pvar) - __va_rounded_size (TYPE *))) \ : __va_rounded_size (TYPE) == 8 \ ? ({ union {char __d[sizeof (TYPE)]; int __i[2];} __u; \ __u.__i[0] = ((int *) (void *) (pvar))[0]; \ __u.__i[1] = ((int *) (void *) (pvar))[1]; \ (pvar) = (char *)(pvar) + 8; \ - *(TYPE *) (void *) __u.__d; }) \ + (TYPE *) (void *) __u.__d; }) \ : ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE), \ - *((TYPE *) (void *) ((char *)(pvar) - __va_rounded_size (TYPE)))));}) + ((TYPE *) (void *) ((char *)(pvar) - __va_rounded_size (TYPE)))));})) #endif /* not __sparc_v9__ */ #endif /* defined (_STDARG_H) || defined (_VARARGS_H) */ diff --git a/gcc/ginclude/va-spur.h b/gcc/ginclude/va-spur.h index 09092c1129f..68cbc5ced64 100644 --- a/gcc/ginclude/va-spur.h +++ b/gcc/ginclude/va-spur.h @@ -38,24 +38,24 @@ typedef struct { #define va_arg(pvar,type) \ __extension__ \ - ({ type __va_result; \ + (*({ type *__va_result; \ if ((pvar).__pnt >= 20) { \ - __va_result = *( (type *) ((pvar).__stack + (pvar).__pnt - 20)); \ + __va_result = ( (type *) ((pvar).__stack + (pvar).__pnt - 20)); \ (pvar).__pnt += (sizeof(type) + 7) & ~7; \ } \ else if ((pvar).__pnt + sizeof(type) > 20) { \ - __va_result = * (type *) (pvar).__stack; \ + __va_result = (type *) (pvar).__stack; \ (pvar).__pnt = 20 + ( (sizeof(type) + 7) & ~7); \ } \ else if (sizeof(type) == 8) { \ union {double d; int i[2];} __u; \ __u.i[0] = *(int *) ((pvar).__regs + (pvar).__pnt); \ __u.i[1] = *(int *) ((pvar).__regs + (pvar).__pnt + 4); \ - __va_result = * (type *) &__u; \ + __va_result = (type *) &__u; \ (pvar).__pnt += 8; \ } \ else { \ - __va_result = * (type *) ((pvar).__regs + (pvar).__pnt); \ + __va_result = (type *) ((pvar).__regs + (pvar).__pnt); \ (pvar).__pnt += (sizeof(type) + 3) & ~3; \ } \ - __va_result; }) + __va_result; }))