aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1993-04-06 18:33:35 -0700
committerJim Wilson <wilson@gcc.gnu.org>1993-04-06 18:33:35 -0700
commit3c01f863eea2afde658d0c0e328880e5e5ad0eec (patch)
tree4201807b7f15c9abfe77973142ab8bfa5c0ef096 /gcc
parent39ab948e9d625b83d5bae53e88f3695032e0722e (diff)
downloadgcc-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.h13
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) */