[R-pkg-devel] Issue with R Package on CRAN - OpenMP and clang17

Ivan Krylov kry|ov@r00t @end|ng |rom gm@||@com
Tue Oct 31 17:58:05 CET 2023


В Mon, 30 Oct 2023 18:52:29 +0300
Ivan Krylov <krylov.r00t using gmail.com> пишет:

> I'll try to reproduce your problem, starting by downloading and
> compiling flang from https://github.com/llvm/llvm-project.git commit
> 092b6c5ee3707ea10b9f10d0a674e8d12395369b (as stated at
> <https://www.stats.ox.ac.uk/pub/bdr/clang17/frailtypack.log>)

Wow. Building LLVM is an adventure, and I don't mean it in a good way.
I had to patch flang/include/flang/Semantics/symbol.h because it
declares `friend class std::array` while my copy of the C++ standard
library has a `struct std::array`, which makes the friend declaration
an error. Naively thinking that I would be helping debug the problem, I
tried compiling a debugging build of LLVM, only to watch in horror as
it consumed all disk space I could offer it. I eventually ran out of
things to delete after the build directory reached 100 gigabytes in
size, while the build still had 1000 out of 6000 targets to compile and
link. Even the release build failed at 410 remaining targets because of
a missing -fPIC somewhere in the compiler command line. Thankfully, it
still produced a working `flang-new` executable.

A release build of LLVM + flang-new takes a relatively reasonable 
8.2 GBytes of storage. The computers that helped launch the first
people into space had 2 kWords of memory, but nowadays you need more
than 256 MBytes of RAM to launch a bird into a pig and 10 GBytes of
storage in order to compile a compiler. This is what progress looks
like.

I was able to reduce the example to the following program:

program main
    implicit none

    real :: sum = 0
    integer :: i, n = 10

    sum = sum + 1. ! <-- error here if followed by OpenMP reduction

    !$OMP PARALLEL DO default(none) PRIVATE (i) SHARED(n) &
    !$OMP REDUCTION(+:sum) SCHEDULE(Dynamic,1)
    do i=1,n
        sum = sum + real(i)
    end do
    !$OMP END PARALLEL DO

    print *, sum
end

% flang-new -c -o /dev/null src.f90 -fopenmp
error: loc("src.f90":7:5): 'omp.reduction' op must be used within an
operation supporting reduction clause interface
error: verification of lowering to FIR failed

gfortran raises no errors or warnings for the test program. Bug
reported at <https://github.com/llvm/llvm-project/issues/70828>.

Would that be enough proof of a compiler bug, or do we need a
confirmation from the developers?

-- 
Best regards,
Ivan




More information about the R-package-devel mailing list