diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1993-04-06 18:33:35 -0700 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1993-04-06 18:33:35 -0700 |
commit | 3c01f863eea2afde658d0c0e328880e5e5ad0eec (patch) | |
tree | 4201807b7f15c9abfe77973142ab8bfa5c0ef096 /gcc | |
parent | 39ab948e9d625b83d5bae53e88f3695032e0722e (diff) | |
download | gcc-3c01f863eea2afde658d0c0e328880e5e5ad0eec.zip gcc-3c01f863eea2afde658d0c0e328880e5e5ad0eec.tar.gz gcc-3c01f863eea2afde658d0c0e328880e5e5ad0eec.tar.bz2 |
(va_arg): Cast argument pointer to (char *).
From-SVN: r4039
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ginclude/va-sparc.h | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/gcc/ginclude/va-sparc.h b/gcc/ginclude/va-sparc.h index 02567ef..f3bac34 100644 --- a/gcc/ginclude/va-sparc.h +++ b/gcc/ginclude/va-sparc.h @@ -64,21 +64,22 @@ void va_end (__gnuc_va_list); /* Defined in libgcc.a */ /* 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. */ + a warning about increasing the alignment requirement. + The casts to char * avoid warnings about invalid pointer arithmetic. */ #define va_arg(pvar,TYPE) \ __extension__ \ ({ TYPE __va_temp; \ ((__builtin_classify_type (__va_temp) >= 12) \ - ? ((pvar) += __va_rounded_size (TYPE *), \ - **(TYPE **) (void *) ((pvar) - __va_rounded_size (TYPE *))) \ + ? ((pvar) = (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) += 8; \ + (pvar) = (char *)(pvar) + 8; \ *(TYPE *) (void *) __u.__d; }) \ - : ((pvar) += __va_rounded_size (TYPE), \ - *((TYPE *) (void *) ((pvar) - __va_rounded_size (TYPE)))));}) + : ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE), \ + *((TYPE *) (void *) ((char *)(pvar) - __va_rounded_size (TYPE)))));}) #endif /* defined (_STDARG_H) || defined (_VARARGS_H) */ |