summaryrefslogtreecommitdiff
path: root/include/libc
diff options
context:
space:
mode:
Diffstat (limited to 'include/libc')
-rw-r--r--include/libc/stdarg.h11
1 files changed, 6 insertions, 5 deletions
diff --git a/include/libc/stdarg.h b/include/libc/stdarg.h
index ec57a0c84..7c7d2800e 100644
--- a/include/libc/stdarg.h
+++ b/include/libc/stdarg.h
@@ -66,11 +66,12 @@ typedef char * __gnuc_va_list;
/* 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 \
- ? ((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8 \
- : ((__PTRDIFF_TYPE__)__AP + 4 - 1) & -4) \
- + __va_rounded_size(__type))))[-1]
+#define va_arg(__AP, __type) \
+ ((__type *) (void *) (__AP = (char *) ((__alignof__(__type) > 4 \
+ ? ((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8 \
+ : ((__PTRDIFF_TYPE__)__AP + 4 - 1) & -4) \
+ + __va_rounded_size (__type))), \
+ *(__type *) (void *) (__AP - __va_rounded_size (__type)))
typedef __gnuc_va_list va_list;