| Summary: | long double issue: isinf(strtold("+inf", NULL)) != 1 | ||
|---|---|---|---|
| Product: | [Developer tools] valgrind | Reporter: | Oran Agra <oran> |
| Component: | memcheck | Assignee: | Julian Seward <jseward> |
| Status: | RESOLVED DUPLICATE | ||
| Severity: | normal | CC: | bruno, pjfloyd |
| Priority: | NOR | ||
| Version First Reported In: | 3.18.1 | ||
| Target Milestone: | --- | ||
| Platform: | Ubuntu | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
The problem is with the isinf call. In this test case
====================================================
#include <math.h>
#include <stdio.h>
long double x;
int main ()
{
x = 1.0L / 0.0L;
printf ("%d %La %d\n", !!isinf (x), x, 33);
return 0;
}
====================================================
we have two isinf calls:
1) in main,
2) inside glibc's fprintf routines, more exactly in glibc/stdio-common/printf_fphex.c, macro PRINTF_FPHEX_FETCH, line 109.
Both return 1 when run natively, but 0 when run under valgrind.
$ ./a.out
1 inf 33
$ valgrind ./a.out
0 0x8p+16381 33
Valgrind version: 3.18.1
Architecture: x86_64
OS: Linux 5.15.0 (Ubuntu 22.04)
GCC: 11.3
CPU: AMD Ryzen 7 4800U
*** This bug has been marked as a duplicate of bug 421262 *** |
SUMMARY strtold("+inf",NULL) seems to return a non-inf value. STEPS TO REPRODUCE #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char *argv[]) { long double x = strtold("+inf", NULL); fprintf(stderr, "x = %Lf, isinf = %d\n", x, isinf(x)); return 0; } OBSERVED RESULT $ ./a.out x = inf, isinf = 1 $ valgrind ./a.out ==2890624== Memcheck, a memory error detector ==2890624== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==2890624== Using Valgrind-3.16.0 and LibVEX; rerun with -h for copyright info ==2890624== Command: ./a.out ==2890624== x = 11897314953572...., isinf = 0 EXPECTED RESULT x = inf, isinf = 1 SOFTWARE/OS VERSIONS Ubuntu 20.04 Linux ip-172-31-20-147 5.4.0-1015-aws #15-Ubuntu SMP Thu Jun 4 22:47:00 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux valgrind-3.16.0 ADDITIONAL INFORMATION it seems to depend on the hardware (i didn't collect enough evidence), i noticed it happens on Xeon, but not on core i7-7700k (both using self built valgrind-3.16.0 on Ubuntu). Seen it on both bare metal Xeon (Valgrind-3.15.0) and AWS c5.xlarge VM (Valgrind-3.16.0), also both with Ubuntu: processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 85 model name : Intel(R) Xeon(R) Platinum 8275CL CPU @ 3.00GHz stepping : 7 microcode : 0x5002f00