https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118841

            Bug ID: 118841
           Summary: please do not use long double in generate_canonical
                    when the range is small enough
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: woodard at redhat dot com
  Target Milestone: ---

This small test program:

#include <random>

#define N 4000

int main(){
  float A[N], B[N], C[N];

  std::random_device rd;
  std::mt19937 gen(rd());
  std::uniform_real_distribution<float> dis(0.0f, 1.0f);

#pragma omp target
  for( int i=0; i<N;i++) {
    A[i] = dis(gen);
    B[i] = dis(gen);
    C[i]=A[i]+B[i];
  }
}        

fails with:

$ g++ -fopenmp 3-3.C
lto1: fatal error: amdgcn-amdhsa - 80-bit-precision floating-point numbers
unsupported (mode ‘XF’)
compilation terminated.
gcn mkoffload: fatal error: x86_64-redhat-linux-accel-amdgcn-amdhsa-gcc
returned 1 exit status
compilation terminated.
lto-wrapper: fatal error:
/usr/libexec/gcc/x86_64-redhat-linux/14//accel/amdgcn-amdhsa/mkoffload returned
1 exit status
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status

evidently this is caused by generate_canonical making use of long double in its
implementation. Can this be changed to using normal precision doubles when the
range is sufficiently narrow much like was done in
https://gcc.gnu.org/r11-4588-g60d9f254876a00

Reply via email to