Recently I used 'stress-ng --class compute ...' which reported the failure of the 'logmath clogl' test. It could be reproduced with this loop which finishes after some random number of iterations:

$ while stress-ng --logmath 1 --logmath-method clogl -t 1; do echo OK; done
stress-ng: info:  [6190] setting to a 1 sec run per stressor
...
stress-ng: info:  [6190] successful run completed in 1.37 sec
OK
...
OK
stress-ng: info:  [6198] setting to a 1 sec run per stressor
stress-ng: info:  [6198] dispatching hogs: 1 logmath
stress-ng: fail:  [6199] logmath: clogl does not match expected result
stress-ng: error: [6198] logmath: [6199] terminated with an error, exit status=2 (stressor failed)
...
stress-ng: info:  [6198] unsuccessful run completed in 1.37 sec

The value mismatch occurs at the very end when the test loop running clogl() is hit by the signal indicating timeout.


A closer look shows that the problem could also be reproduced without any external math function:

$ uname -r
3.5.4-1.x86_64

$ gcc --version
gcc (GCC) 12.4.0
...

$ cat sigtest.c
#include <signal.h>
#include <stdio.h>

static volatile sig_atomic_t sigcnt;

static void sigint_handler(int sig)
{
  (void)sig;
  sigcnt++;
}

#ifndef WORKS
typedef long double float_type;
#define FMT "La"
#else
typedef double float_type;
#define FMT "a"
#endif

int main()
{
  signal(SIGINT, sigint_handler);
  volatile float_type x = 0x1.23456789p+0;
  while (sigcnt < 42) {
    volatile float_type y = x;
    volatile float_type d = y - x;
    if (d != 0.0)
      printf("x = %" FMT ", y = %" FMT ", d = %" FMT "\n", x, y, d);
  }
}

$ gcc -o sigtest -O2 sigtest.c

$ ./sigtest > out.txt
(press ^C 42x :-)

$ sort out.txt | uniq -c
      3 x = 0x1.23456789p+0, y = -nan, d = -nan
      6 x = 0x1.23456789p+0, y = 0x1.23456789p+0, d = -nan
     33 x = 0x1.23456789p+0, y = 0x1.23456789p+0, d = 0x0p+0

The problem also occurs if compiled without -O2, but less often. No problem occurs if compiled with -DWORKS which suggests that only 'long double' is affected.

--
Regards,
Christian


--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to