Reorganize va_arg
authorJason Merrill <merrill@gnu.org>
Fri, 14 Apr 1995 23:44:01 +0000 (23:44 +0000)
committerJason Merrill <merrill@gnu.org>
Fri, 14 Apr 1995 23:44:01 +0000 (23:44 +0000)
From-SVN: r9387

gcc/ginclude/va-clipper.h
gcc/ginclude/va-pa.h
gcc/ginclude/va-pyr.h
gcc/ginclude/va-sparc.h
gcc/ginclude/va-spur.h

index 6a797dc69643b2f57364d585d2fc745799522631..21ddc56288558d3cb15fd7d4f0723e8b14887a74 100644 (file)
@@ -46,11 +46,11 @@ typedef struct
   ((AP).__va_ap = ((AP).__va_ap + sizeof (int) - 1) & ~(sizeof (int) - 1)))
 
 #define va_arg(AP, TYPE) \
-  ((AP).__va_num < 2 && __builtin_classify_type (* (TYPE *)0) < 12     \
+  (*((AP).__va_num < 2 && __builtin_classify_type (* (TYPE *)0) < 12   \
    ? (__builtin_classify_type (* (TYPE *)0) == 8                       \
-      ? (*(TYPE *)(AP).__va_reg[2 * (AP).__va_num++ + 1])              \
-      : (*(TYPE *)(AP).__va_reg[2 * (AP).__va_num++ ]))                        \
-   : ((AP).__va_num++, __va_round (AP,TYPE), *((TYPE *)((AP).__va_ap))++))
+      ? ((TYPE *)(AP).__va_reg[2 * (AP).__va_num++ + 1])               \
+      : ((TYPE *)(AP).__va_reg[2 * (AP).__va_num++ ]))                 \
+   : ((AP).__va_num++, __va_round (AP,TYPE), ((TYPE *)((AP).__va_ap))++)))
 
 #define va_end(AP)     ((void) 0)
 
index 467bccedff75835c7122d5fa4ed0fe9abbdc5687..b6b81dd09253e513ca9bbd7653deb2606e3b57b7 100644 (file)
@@ -33,13 +33,13 @@ typedef double *__gnuc_va_list;
 #endif
 
 #define va_arg(AP,TYPE)                                                \
-  (sizeof(TYPE) > 8 ?                                          \
+  (*(sizeof(TYPE) > 8 ?                                                \
    ((AP = (__gnuc_va_list) ((char *)AP - sizeof (int))),       \
-    (*((TYPE *) (void *) (*((int *) (AP))))))                  \
+    (((TYPE *) (void *) (*((int *) (AP))))))                   \
    :((AP =                                                     \
       (__gnuc_va_list) ((long)((char *)AP - sizeof (TYPE))     \
                        & (sizeof(TYPE) > 4 ? ~0x7 : ~0x3))),   \
-     (*((TYPE *) (void *) ((char *)AP + ((8 - sizeof(TYPE)) % 4))))))
+     (((TYPE *) (void *) ((char *)AP + ((8 - sizeof(TYPE)) % 4)))))))
 
 #ifndef va_end
 void va_end (__gnuc_va_list);          /* Defined in libgcc.a */
index 6ffd874e2c0a5c7439136b1e75b359370d998985..5ad4ba9d763ef56e246b4024d87e0058c829e58f 100644 (file)
@@ -111,7 +111,7 @@ typedef __va_buf __gnuc_va_list;
    a warning about increasing the alignment requirement.  */
 #define va_arg(_AP, _MODE)     \
 __extension__                                                          \
-({__voidptr *__ap = (__voidptr*)&_AP;                                  \
+(*({__voidptr *__ap = (__voidptr*)&_AP;                                        \
   register int __size = sizeof (_MODE);                                        \
   register int __onstack =                                             \
          (__size > 8 || ( (int)(__ap[2]) > 11) ||                      \
@@ -121,8 +121,8 @@ __extension__                                                               \
   ((void *)__ap[__onstack])+=__size;                                   \
     if (__onstack==0 || (int)(__ap[2])==11)                            \
       __ap[2]+= (__size >> 2);                                         \
-  *(( _MODE *) (void *) __param_addr);                                 \
-})
+  (( _MODE *) (void *) __param_addr);                                  \
+}))
 
 void va_end (__gnuc_va_list);          /* Defined in libgcc.a */
 #define va_end(_X)     ((void)0)
index 3df289c0f092a42bf0ee69ee764dff991dec8605..525420a96e4251e39d4a8c1c77d335275c80dc1d 100644 (file)
@@ -132,7 +132,7 @@ enum __va_type_classes {
 
 #define va_arg(pvar,TYPE)                                      \
 __extension__                                                  \
-({int __type = __builtin_classify_type (* (TYPE *) 0);         \
+(*({int __type = __builtin_classify_type (* (TYPE *) 0);       \
   void * __result;                                             \
   if (__type == __real_type_class)             /* float? */    \
     {                                                          \
@@ -170,7 +170,7 @@ __extension__                                                       \
        __r = (void **) pvar.__va_next_stack++;                 \
       __result = *__r;                                         \
     }                                                          \
-  *(TYPE *) __result;})
+  (TYPE *) __result;}))
 
 #else /* not __sparc_v9__ */
 
@@ -184,18 +184,17 @@ __extension__                                                     \
    The casts to char * avoid warnings about invalid pointer arithmetic.  */
 #define va_arg(pvar,TYPE)                                      \
 __extension__                                                  \
-({ TYPE __va_temp;                                             \
-   ((__builtin_classify_type (__va_temp) >= __record_type_class) \
+(*({((__builtin_classify_type (*(TYPE*) 0) >= __record_type_class) \
     ? ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE *),   \
-       **(TYPE **) (void *) ((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) = (char *)(pvar) + 8;                           \
-        *(TYPE *) (void *) __u.__d; })                         \
+        (TYPE *) (void *) __u.__d; })                          \
     : ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE),     \
-       *((TYPE *) (void *) ((char *)(pvar) - __va_rounded_size (TYPE)))));})
+       ((TYPE *) (void *) ((char *)(pvar) - __va_rounded_size (TYPE)))));}))
 #endif /* not __sparc_v9__ */
 
 #endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
index 09092c1129f927219f2ad869b6232735bb85cdc7..68cbc5ced64c1883f7ce1a1cb9312ba92a87b5eb 100644 (file)
@@ -38,24 +38,24 @@ typedef struct {
 
 #define va_arg(pvar,type)  \
 __extension__ \
-    ({  type __va_result; \
+    (*({  type *__va_result; \
         if ((pvar).__pnt >= 20) { \
-           __va_result = *( (type *) ((pvar).__stack + (pvar).__pnt - 20)); \
+           __va_result = ( (type *) ((pvar).__stack + (pvar).__pnt - 20)); \
           (pvar).__pnt += (sizeof(type) + 7) & ~7; \
        } \
        else if ((pvar).__pnt + sizeof(type) > 20) { \
-          __va_result = (type *) (pvar).__stack; \
+          __va_result = (type *) (pvar).__stack; \
           (pvar).__pnt = 20 + ( (sizeof(type) + 7) & ~7); \
        } \
        else if (sizeof(type) == 8) { \
           union {double d; int i[2];} __u; \
           __u.i[0] = *(int *) ((pvar).__regs + (pvar).__pnt); \
           __u.i[1] = *(int *) ((pvar).__regs + (pvar).__pnt + 4); \
-          __va_result = (type *) &__u; \
+          __va_result = (type *) &__u; \
           (pvar).__pnt += 8; \
        } \
        else { \
-          __va_result = (type *) ((pvar).__regs + (pvar).__pnt); \
+          __va_result = (type *) ((pvar).__regs + (pvar).__pnt); \
           (pvar).__pnt += (sizeof(type) + 3) & ~3; \
        } \
-       __va_result; })
+       __va_result; }))