http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59379

--- Comment #9 from H.J. Lu <hjl.tools at gmail dot com> ---
A small run-time testcase.  It went into an finite loop at -O.

---
[hjl@gnu-mic-2 pr59379]$ cat main.c 
#include <stdlib.h>
typedef unsigned long int __cpu_mask;
void *
__attribute__((malloc, noinline))
gomp_malloc (size_t s)
{
  return malloc (s);
}
typedef struct
{
  __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))];
} cpu_set_t;
unsigned long gomp_cpuset_size __attribute__ ((visibility ("hidden")));
cpu_set_t *gomp_cpusetp __attribute__ ((visibility ("hidden")));
static unsigned long gomp_get_cpuset_size;
void
__attribute__ ((noinline))
gomp_init_num_threads (void)
{
  gomp_cpuset_size = 8;
  gomp_cpusetp = (cpu_set_t *) gomp_malloc (gomp_cpuset_size);
  do
    {
      gomp_get_cpuset_size = gomp_cpuset_size;
      unsigned long i;
      for (i = gomp_cpuset_size * 8; i; i--)
    if ((__extension__
         ({ size_t __cpu = (i - 1);
          __cpu < 8 * (gomp_cpuset_size)
          ? ((((const __cpu_mask *) ((gomp_cpusetp)->__bits))[((__cpu) / (8 *
sizeof (__cpu_mask)))] & ((__cpu_mask) 1 << ((__cpu) % (8 * sizeof
(__cpu_mask)))))) != 0
          : 0;
          })))
      break;
      gomp_cpuset_size = ((((i) + (8 * sizeof (__cpu_mask)) - 1) / (8 * sizeof
(__cpu_mask))) * sizeof (__cpu_mask));
      return;
    }
  while (1);
}
int
main ()
{
  gomp_init_num_threads ();
  return 0;
}
[hjl@gnu-mic-2 pr59379]$ make run
/export/build/gnu/gcc-lto-fdo/build-x86_64-linux/gcc/xgcc
-B/export/build/gnu/gcc-lto-fdo/build-x86_64-linux/gcc/ -O -o x main.c
./x
make: *** wait: No child processes.  Stop.
make: *** Waiting for unfinished jobs....
make: *** wait: No child processes.  Stop.
---

Reply via email to