From 7436f435abe0acd250189907a0c310927d11bac6 Mon Sep 17 00:00:00 2001 From: Richard Stallman Date: Tue, 15 Sep 1992 05:08:02 +0000 Subject: [PATCH] (va_arg): Cast ptr to void *, then to TYPE *. From-SVN: r2124 --- gcc/ginclude/stdarg.h | 4 +++- gcc/ginclude/va-i960.h | 4 +++- gcc/ginclude/va-m88k.h | 15 +++++++++------ gcc/ginclude/va-mips.h | 12 +++++++----- gcc/ginclude/va-pa.h | 4 ++-- gcc/ginclude/va-pyr.h | 4 +++- gcc/ginclude/va-sparc.h | 6 ++++-- 7 files changed, 31 insertions(+), 18 deletions(-) diff --git a/gcc/ginclude/stdarg.h b/gcc/ginclude/stdarg.h index 79fe404d5ea..ee9204ab4e9 100644 --- a/gcc/ginclude/stdarg.h +++ b/gcc/ginclude/stdarg.h @@ -62,9 +62,11 @@ typedef void *__gnuc_va_list; void va_end (__gnuc_va_list); /* Defined in libgcc.a */ #define va_end(AP) +/* We cast to void * and then to TYPE * because this avoids + a warning about increasing the alignment requirement. */ #define va_arg(AP, TYPE) \ (AP = (char *) (AP) + __va_rounded_size (TYPE), \ - *((TYPE *) ((char *) (AP) - __va_rounded_size (TYPE)))) + *((TYPE *) (void *) ((char *) (AP) - __va_rounded_size (TYPE)))) #endif /* _STDARG_H */ #endif /* not alpha */ diff --git a/gcc/ginclude/va-i960.h b/gcc/ginclude/va-i960.h index 28fc0d44935..549e9fec1ae 100644 --- a/gcc/ginclude/va-i960.h +++ b/gcc/ginclude/va-i960.h @@ -40,6 +40,8 @@ typedef unsigned __gnuc_va_list[2]; #define va_start(AP) ((AP)[1] = 0, *(AP) = (unsigned) &va_alist) #endif +/* We cast to void * and then to TYPE * because this avoids + a warning about increasing the alignment requirement. */ #define va_arg(AP, T) \ ( \ ( \ @@ -48,7 +50,7 @@ typedef unsigned __gnuc_va_list[2]; : ((AP)[1] = __vpad ((AP)[1], T)) \ ), \ \ - *((T *) ((char *) *(AP) + (AP)[1] - __vsiz (T))) \ + *((T *) (void *) ((char *) *(AP) + (AP)[1] - __vsiz (T))) \ ) void va_end (__gnuc_va_list); /* Defined in libgcc.a */ diff --git a/gcc/ginclude/va-m88k.h b/gcc/ginclude/va-m88k.h index 5c7b10ec84d..ae1d4d64fc4 100644 --- a/gcc/ginclude/va-m88k.h +++ b/gcc/ginclude/va-m88k.h @@ -63,13 +63,16 @@ typedef struct #define __va_size(TYPE) ((sizeof(TYPE) + 3) >> 2) -#define va_arg(AP,TYPE) \ +/* We cast to void * and then to TYPE * because this avoids + a warning about increasing the alignment requirement. */ +#define va_arg(AP,TYPE) \ ( (AP).__va_arg = (((AP).__va_arg + (1 << (__alignof__(TYPE) >> 3)) - 1) \ - & ~((1 << (__alignof__(TYPE) >> 3)) - 1)) \ - + __va_size(TYPE), \ - *((TYPE *) ((__va_reg_p(TYPE) && (AP).__va_arg < 8 + __va_size(TYPE) \ - ? (AP).__va_reg : (AP).__va_stk) \ - + ((AP).__va_arg - __va_size(TYPE))))) + & ~((1 << (__alignof__(TYPE) >> 3)) - 1)) \ + + __va_size(TYPE), \ + *((TYPE *) (void *) ((__va_reg_p(TYPE) \ + && (AP).__va_arg < 8 + __va_size(TYPE) \ + ? (AP).__va_reg : (AP).__va_stk) \ + + ((AP).__va_arg - __va_size(TYPE))))) #define va_end(AP) diff --git a/gcc/ginclude/va-mips.h b/gcc/ginclude/va-mips.h index 4222f8bf203..ec0e7803475 100644 --- a/gcc/ginclude/va-mips.h +++ b/gcc/ginclude/va-mips.h @@ -49,11 +49,13 @@ void va_end (__gnuc_va_list); /* Defined in libgcc.a */ #define va_arg(list, mode) ((mode *)(list += __va_rounded_size(mode)))[-1] #else /* !lint */ -#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] +/* We cast to void * and then to TYPE * because this avoids + a warning about increasing the alignment requirement. */ +#define va_arg(__AP, __type) \ + ((__type *) (void *) (__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) */ diff --git a/gcc/ginclude/va-pa.h b/gcc/ginclude/va-pa.h index 0d84ef7ae86..eb6c600fab9 100644 --- a/gcc/ginclude/va-pa.h +++ b/gcc/ginclude/va-pa.h @@ -22,11 +22,11 @@ typedef double *__gnuc_va_list; #define va_arg(AP,TYPE) \ (sizeof(TYPE) > 8 ? \ ((AP = (__gnuc_va_list) ((char *)AP - sizeof (int))), \ - (*((TYPE *) (*((int *) (AP)))))) \ + (*((TYPE *) (void *) (*((int *) (AP)))))) \ :((AP = \ (__gnuc_va_list) ((long)((char *)AP - sizeof (TYPE)) \ & (sizeof(TYPE) > 4 ? ~0x7 : ~0x3))), \ - (*((TYPE *) ((char *)AP + ((8 - sizeof(TYPE)) % 4)))))) + (*((TYPE *) (void *) ((char *)AP + ((8 - sizeof(TYPE)) % 4)))))) #define va_end(AP) diff --git a/gcc/ginclude/va-pyr.h b/gcc/ginclude/va-pyr.h index 61bddbf60c8..86f3715e9d0 100644 --- a/gcc/ginclude/va-pyr.h +++ b/gcc/ginclude/va-pyr.h @@ -107,6 +107,8 @@ typedef __va_buf __gnuc_va_list; #define __extension__ #endif +/* We cast to void * and then to TYPE * because this avoids + a warning about increasing the alignment requirement. */ #define va_arg(_AP, _MODE) \ __extension__ \ ({__voidptr *__ap = (__voidptr*)&_AP; \ @@ -119,7 +121,7 @@ __extension__ \ ((void *)__ap[__onstack])+=__size; \ if (__onstack==0 || (int)(__ap[2])==11) \ __ap[2]+= (__size >> 2); \ - *(( _MODE *)__param_addr); \ + *(( _MODE *) (void *) __param_addr); \ }) void va_end (__gnuc_va_list); /* Defined in libgcc.a */ diff --git a/gcc/ginclude/va-sparc.h b/gcc/ginclude/va-sparc.h index f98bbc4fd44..2744c4321b9 100644 --- a/gcc/ginclude/va-sparc.h +++ b/gcc/ginclude/va-sparc.h @@ -59,6 +59,8 @@ void va_end (__gnuc_va_list); /* Defined in libgcc.a */ not word-aligned, we advance the pointer to the first non-reg slot. */ /* We don't declare the union member `d' to have type TYPE because that would lose in C++ if TYPE has a constructor. */ +/* We cast to void * and then to TYPE * because this avoids + a warning about increasing the alignment requirement. */ #define va_arg(pvar,TYPE) \ __extension__ \ ({ TYPE __va_temp; \ @@ -70,9 +72,9 @@ __extension__ \ __u.__i[0] = ((int *) (pvar))[0]; \ __u.__i[1] = ((int *) (pvar))[1]; \ (pvar) += 8; \ - *(TYPE *)__u.__d; }) \ + *(TYPE *) (void *) __u.__d; }) \ : ((pvar) += __va_rounded_size (TYPE), \ - *((TYPE *) ((pvar) - __va_rounded_size (TYPE)))));}) + *((TYPE *) (void *) ((pvar) - __va_rounded_size (TYPE)))));}) #endif /* defined (_STDARG_H) || defined (_VARARGS_H) */ -- 2.30.2