Removed bug in xgprintf.c
authorGötz Lindenmaier <goetz@ipd.info.uni-karlsruhe.de>
Mon, 28 May 2001 15:36:25 +0000 (15:36 +0000)
committerGötz Lindenmaier <goetz@ipd.info.uni-karlsruhe.de>
Mon, 28 May 2001 15:36:25 +0000 (15:36 +0000)
tv.c.
  Faulty use of va_arg, became visible with new, stricter gcc 2.96.

[r157]

ir/common/firm.c
ir/common/xfprintf.c
ir/common/xgprintf.c
ir/common/xoprintf.c

index b981cad..a423680 100644 (file)
@@ -27,6 +27,7 @@ init_firm (void)
   xprintf_register ('v', tarval_print);
   /* register the character 'R' as variable for ir node outputs. */
   xprintf_register ('R', ir_node_print);
+
   /* initialize all ident stuff */
   id_init ();
   /* create the type kinds. */
index a29a961..defc119 100644 (file)
@@ -27,7 +27,6 @@ xfprinter (void *f, const char *data, size_t len)
   return len;
 }
 
-
 int
 xfprintf (FILE *F, const char *fmt, ...)
 {
index 4ce4c42..bf25ea6 100644 (file)
@@ -36,7 +36,6 @@ xprintf_register (char spec, xprintf_function func)
   print_func[(unsigned char)spec] = func;
 }
 
-
 int
 xvgprintf (xgprintf_func *out, void *arg, const char *fmt, va_list args)
 {
@@ -62,6 +61,8 @@ xvgprintf (xgprintf_func *out, void *arg, const char *fmt, va_list args)
                                                                   number of chars for from string */
   int qualifier;                               /* 'h', 'l', or 'L' for integer fields */
 
+  unsigned short helper_short;
+
   done = 0;
 
 #define P(__b,__l) do { out (arg, __b, __l); done += __l; } while (0)
@@ -215,10 +216,13 @@ xvgprintf (xgprintf_func *out, void *arg, const char *fmt, va_list args)
       case 'x':                        /* heXadecimal */
                base = 16;
       number:                  /* get and print a unsigned number */
+
                if (qualifier == 'l')
                  num = va_arg(args, unsigned long);
                else if (qualifier == 'h')
-                 num = va_arg(args, unsigned short);
+                 /* vormals unsigned short, falsch fuer gcc 2.96
+                    siehe http://mail.gnu.org/pipermail/discuss-gnustep/1999-October/010624.html */
+                 num = va_arg(args, unsigned int);
                else
                  num = va_arg(args, unsigned int);
                /* ANSI only specifies the `+' and ` ' flags for signed conversions.  */
@@ -230,7 +234,9 @@ xvgprintf (xgprintf_func *out, void *arg, const char *fmt, va_list args)
                if (qualifier == 'l')
                  signed_num = va_arg(args, long);
                else if (qualifier == 'h')
-                 signed_num = va_arg(args, short);
+                 /* vormals short, falsch fuer gcc 2.96 siehe
+                    http://mail.gnu.org/pipermail/discuss-gnustep/1999-October/010624.html */
+                 signed_num = va_arg(args, int);
                else
                  signed_num = va_arg(args, int);
                num = (is_neg = signed_num < 0) ? - signed_num : signed_num;
index bc096a7..c1a17d4 100644 (file)
@@ -33,7 +33,6 @@ xoprintf (struct obstack *obst, const char *fmt, ...)
   return res;
 }
 
-
 int
 xvoprintf (struct obstack *obst, const char *fmt, va_list args)
 {