--- gcc/ginclude/va-i960.h 2018/04/24 18:23:45 1.1.1.1 +++ gcc/ginclude/va-i960.h 2018/04/24 18:31:24 1.1.1.2 @@ -36,16 +36,22 @@ typedef unsigned __gnuc_va_list[2]; #endif #ifdef _STDARG_H +/* Call __builtin_next_arg even though we aren't using its value, so that + we can verify that firstarg is correct. */ #define va_start(AP, LASTARG) \ __extension__ \ -({ __asm__ ("st g14,%0" : "=m" (*(AP))); \ +({ __builtin_next_arg (LASTARG); \ + __asm__ ("st g14,%0" : "=m" (*(AP))); \ (AP)[1] = (__builtin_args_info (0) + __builtin_args_info (1)) * 4; }) #else #define va_alist __builtin_va_alist #define va_dcl char *__builtin_va_alist; __va_ellipsis -#define va_start(AP) ((AP)[1] = 0, *(AP) = (unsigned) &va_alist) +#define va_start(AP) \ +__extension__ \ +({ __asm__ ("st g14,%0" : "=m" (*(AP))); \ + (AP)[1] = (__builtin_args_info (0) + __builtin_args_info (1)) * 4; }) #endif /* We cast to void * and then to TYPE * because this avoids @@ -64,7 +70,7 @@ __extension__ \ #ifndef va_end void va_end (__gnuc_va_list); /* Defined in libgcc.a */ #endif -#define va_end(AP) +#define va_end(AP) ((void *)0) #endif /* defined (_STDARG_H) || defined (_VARARGS_H) */