diff options
Diffstat (limited to 'stdio-common')
-rw-r--r-- | stdio-common/printf_fp.c | 3 | ||||
-rw-r--r-- | stdio-common/tstdiomisc.c | 38 | ||||
-rw-r--r-- | stdio-common/vfprintf.c | 51 |
3 files changed, 50 insertions, 42 deletions
diff --git a/stdio-common/printf_fp.c b/stdio-common/printf_fp.c index a72744d59e..ad60f43eac 100644 --- a/stdio-common/printf_fp.c +++ b/stdio-common/printf_fp.c @@ -133,9 +133,6 @@ #define MPN_GE(u,v) \ (u##size > v##size || (u##size == v##size && __mpn_cmp (u, v, u##size) >= 0)) -extern int __isinfl_internal (long double) attribute_hidden; -extern int __isnanl_internal (long double) attribute_hidden; - extern mp_size_t __mpn_extract_double (mp_ptr res_ptr, mp_size_t size, int *expt, int *is_neg, double value); diff --git a/stdio-common/tstdiomisc.c b/stdio-common/tstdiomisc.c index c1c68955bd..d24c55f53c 100644 --- a/stdio-common/tstdiomisc.c +++ b/stdio-common/tstdiomisc.c @@ -46,9 +46,9 @@ t2 (void) return result; } -volatile double nanval; +volatile double qnanval; volatile double infval; -volatile long double lnanval; +volatile long double lqnanval; volatile long double linfval; @@ -59,16 +59,17 @@ F (void) wchar_t wbuf[40]; int result; - nanval = NAN; + qnanval = NAN; snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G", - nanval, nanval, nanval, nanval, nanval, nanval, nanval, nanval); + qnanval, qnanval, qnanval, qnanval, + qnanval, qnanval, qnanval, qnanval); result = strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0; printf ("expected \"nan NAN nan NAN nan NAN nan NAN\", got \"%s\"\n", buf); snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G", - -nanval, -nanval, -nanval, -nanval, - -nanval, -nanval, -nanval, -nanval); + -qnanval, -qnanval, -qnanval, -qnanval, + -qnanval, -qnanval, -qnanval, -qnanval); result = strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0; printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n", buf); @@ -88,13 +89,14 @@ F (void) buf); swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%a %A %e %E %f %F %g %G", - nanval, nanval, nanval, nanval, nanval, nanval, nanval, nanval); + qnanval, qnanval, qnanval, qnanval, + qnanval, qnanval, qnanval, qnanval); result |= wcscmp (wbuf, L"nan NAN nan NAN nan NAN nan NAN") != 0; printf ("expected L\"nan NAN nan NAN nan NAN nan NAN\", got L\"%S\"\n", wbuf); swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%a %A %e %E %f %F %g %G", - -nanval, -nanval, -nanval, -nanval, - -nanval, -nanval, -nanval, -nanval); + -qnanval, -qnanval, -qnanval, -qnanval, + -qnanval, -qnanval, -qnanval, -qnanval); result |= wcscmp (wbuf, L"-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0; printf ("expected L\"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got L\"%S\"\n", wbuf); @@ -111,17 +113,17 @@ F (void) printf ("expected L\"-inf -INF -inf -INF -inf -INF -inf -INF\", got L\"%S\"\n", wbuf); - lnanval = NAN; + lqnanval = NAN; snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG", - lnanval, lnanval, lnanval, lnanval, - lnanval, lnanval, lnanval, lnanval); + lqnanval, lqnanval, lqnanval, lqnanval, + lqnanval, lqnanval, lqnanval, lqnanval); result = strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0; printf ("expected \"nan NAN nan NAN nan NAN nan NAN\", got \"%s\"\n", buf); snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG", - -lnanval, -lnanval, -lnanval, -lnanval, - -lnanval, -lnanval, -lnanval, -lnanval); + -lqnanval, -lqnanval, -lqnanval, -lqnanval, + -lqnanval, -lqnanval, -lqnanval, -lqnanval); result = strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0; printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n", buf); @@ -143,15 +145,15 @@ F (void) swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%La %LA %Le %LE %Lf %LF %Lg %LG", - lnanval, lnanval, lnanval, lnanval, - lnanval, lnanval, lnanval, lnanval); + lqnanval, lqnanval, lqnanval, lqnanval, + lqnanval, lqnanval, lqnanval, lqnanval); result |= wcscmp (wbuf, L"nan NAN nan NAN nan NAN nan NAN") != 0; printf ("expected L\"nan NAN nan NAN nan NAN nan NAN\", got L\"%S\"\n", wbuf); swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%La %LA %Le %LE %Lf %LF %Lg %LG", - -lnanval, -lnanval, -lnanval, -lnanval, - -lnanval, -lnanval, -lnanval, -lnanval); + -lqnanval, -lqnanval, -lqnanval, -lqnanval, + -lqnanval, -lqnanval, -lqnanval, -lqnanval); result |= wcscmp (wbuf, L"-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0; printf ("expected L\"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got L\"%S\"\n", wbuf); diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index df4bc47f98..c8bcf5a976 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -67,7 +67,7 @@ do { \ unsigned int _val = val; \ assert ((unsigned int) done < (unsigned int) INT_MAX); \ - if (__builtin_expect (INT_MAX - done < _val, 0)) \ + if (__glibc_unlikely (INT_MAX - done < _val)) \ { \ done = -1; \ __set_errno (EOVERFLOW); \ @@ -91,7 +91,7 @@ if (width > 0) \ { \ unsigned int d = _IO_padn (s, (Padchar), width); \ - if (__builtin_expect (d == EOF, 0)) \ + if (__glibc_unlikely (d == EOF)) \ { \ done = -1; \ goto all_done; \ @@ -120,7 +120,7 @@ if (width > 0) \ { \ unsigned int d = _IO_wpadn (s, (Padchar), width); \ - if (__builtin_expect (d == EOF, 0)) \ + if (__glibc_unlikely (d == EOF)) \ { \ done = -1; \ goto all_done; \ @@ -166,7 +166,7 @@ done = -1; \ goto all_done; \ } \ - if (__builtin_expect (INT_MAX - done < (Len), 0)) \ + if (__glibc_unlikely (INT_MAX - done < (Len))) \ { \ done = -1; \ __set_errno (EOVERFLOW); \ @@ -302,7 +302,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) do \ { \ int offset; \ - void *__unbounded ptr; \ + void *ptr; \ spec = (ChExpr); \ offset = NOT_IN_JUMP_RANGE (spec) ? REF (form_unknown) \ : table[CHAR_CLASS (spec)]; \ @@ -315,7 +315,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) # define JUMP(ChExpr, table) \ do \ { \ - const void *__unbounded ptr; \ + const void *ptr; \ spec = (ChExpr); \ ptr = NOT_IN_JUMP_RANGE (spec) ? REF (form_unknown) \ : table[CHAR_CLASS (spec)]; \ @@ -1108,7 +1108,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) outstring (string, len); \ if (left) \ PAD (L' '); \ - if (__builtin_expect (string_malloced, 0)) \ + if (__glibc_unlikely (string_malloced)) \ free (string); \ } \ break; @@ -1254,7 +1254,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) outstring (string, len); \ if (left) \ PAD (' '); \ - if (__builtin_expect (string_malloced, 0)) \ + if (__glibc_unlikely (string_malloced)) \ free (string); \ } \ break; @@ -1315,9 +1315,9 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) goto all_done; /* Use the slow path in case any printf handler is registered. */ - if (__builtin_expect (__printf_function_table != NULL + if (__glibc_unlikely (__printf_function_table != NULL || __printf_modifier_table != NULL - || __printf_va_arg_table != NULL, 0)) + || __printf_va_arg_table != NULL)) goto do_positional; /* Process whole format string. */ @@ -1452,7 +1452,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) left = 1; } - if (__builtin_expect (width >= INT_MAX / sizeof (CHAR_T) - 32, 0)) + if (__glibc_unlikely (width >= INT_MAX / sizeof (CHAR_T) - 32)) { __set_errno (EOVERFLOW); done = -1; @@ -1484,8 +1484,8 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) LABEL (width): width = read_int (&f); - if (__builtin_expect (width == -1 - || width >= INT_MAX / sizeof (CHAR_T) - 32, 0)) + if (__glibc_unlikely (width == -1 + || width >= INT_MAX / sizeof (CHAR_T) - 32)) { __set_errno (EOVERFLOW); done = -1; @@ -1561,7 +1561,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) if (prec > width && prec > sizeof (work_buffer) / sizeof (work_buffer[0]) - 32) { - if (__builtin_expect (prec >= INT_MAX / sizeof (CHAR_T) - 32, 0)) + if (__glibc_unlikely (prec >= INT_MAX / sizeof (CHAR_T) - 32)) { __set_errno (EOVERFLOW); done = -1; @@ -1645,7 +1645,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) /* The format is correctly handled. */ ++nspecs_done; - if (__builtin_expect (workstart != NULL, 0)) + if (__glibc_unlikely (workstart != NULL)) free (workstart); workstart = NULL; @@ -1691,7 +1691,8 @@ do_positional: /* Just a counter. */ size_t cnt; - free (workstart); + if (__glibc_unlikely (workstart != NULL)) + free (workstart); workstart = NULL; if (grouping == (const char *) -1) @@ -1736,7 +1737,7 @@ do_positional: + sizeof (*args_type)); /* Check for potential integer overflow. */ - if (__builtin_expect (nargs > INT_MAX / bytes_per_arg, 0)) + if (__glibc_unlikely (nargs > INT_MAX / bytes_per_arg)) { __set_errno (EOVERFLOW); done = -1; @@ -1841,7 +1842,7 @@ do_positional: default: if ((args_type[cnt] & PA_FLAG_PTR) != 0) args_value[cnt].pa_pointer = va_arg (ap_save, void *); - else if (__builtin_expect (__printf_va_arg_table != NULL, 0) + else if (__glibc_unlikely (__printf_va_arg_table != NULL) && __printf_va_arg_table[args_type[cnt] - PA_LAST] != NULL) { args_value[cnt].pa_user = alloca (args_size[cnt]); @@ -1944,6 +1945,11 @@ do_positional: { workstart = (CHAR_T *) malloc ((MAX (prec, width) + 32) * sizeof (CHAR_T)); + if (workstart == NULL) + { + done = -1; + goto all_done; + } workend = workstart + (MAX (prec, width) + 32); } } @@ -2021,7 +2027,8 @@ do_positional: break; } - free (workstart); + if (__glibc_unlikely (workstart != NULL)) + free (workstart); workstart = NULL; /* Write the following constant string. */ @@ -2032,8 +2039,10 @@ do_positional: } all_done: - free (args_malloced); - free (workstart); + if (__glibc_unlikely (args_malloced != NULL)) + free (args_malloced); + if (__glibc_unlikely (workstart != NULL)) + free (workstart); /* Unlock the stream. */ _IO_funlockfile (s); _IO_cleanup_region_end (0); |