Moved from https://github.com/JuliaMath/openlibm/issues/278#issuecomment-2581246607 > There's the same warning on riscv64: > > ``` > In file included from /home/runner/work/openlibm/openlibm/include/openlibm_fenv.h:18, > from src/s_lrint.c:29: > In function ‘feupdateenv’, > inlined from ‘lrint’ at src/s_lrint.c:59:2: > /home/runner/work/openlibm/openlibm/include/openlibm_fenv_riscv.h:87:25: warning: ‘env’ is used uninitialized [-Wuninitialized] > 87 | #define __wfs(__fcsr) __asm __volatile("csrw fcsr, %0" :: "r" (__fcsr)) > | ^~~~~ > /home/runner/work/openlibm/openlibm/include/openlibm_fenv_riscv.h:213:9: note: in expansion of macro ‘__wfs’ > 213 | __wfs(*__envp); > | ^~~~~ > src/s_lrint.c: In function ‘lrint’: > src/s_lrint.c:52:16: note: ‘env’ was declared here > 52 | fenv_t env; > | ^~~ > ``` > > This also makes Julia crash on riscv64 during bootstrap after the [update of openlibm to v0.8.4](https://github.com/JuliaLang/julia/commit/5ec41e90c20ee3825d32d2d374920ce0df81f73c) with the following error message > > ``` > $ make -j3 > [...] > JULIA usr/lib/julia/sys-o.a > Collecting and executing precompile statements > └ Collect (Basic: ✓ fatal: error thrown and no exception handler available. > BoundsError(a=Array{Base.Partr.taskheap, 1}(dims=(0,), mem=Memory{Base.Partr.taskheap}(0, 0x3f848c0a60)[]), i=(0,)) > throw_boundserror at ./essentials.jl:15 > getindex at ./essentials.jl:916 [inlined] > getindex at ./abstractarray.jl:1345 [inlined] > multiq_insert at ./partr.jl:152 > enq_work at ./task.jl:972 > #schedule#589 at ./task.jl:1040 > schedule at ./task.jl:1027 [inlined] > notify at ./condition.jl:165 > #notify#552 at ./condition.jl:159 [inlined] > notify at ./condition.jl:159 [inlined] > notify at ./condition.jl:159 [inlined] > task_done_hook at ./task.jl:823 > unknown function (ip: 0x3f7e650957) at (unknown file) > jl_apply at /home/mose/repo/julia/src/julia.h:2246 [inlined] > jl_finish_task at /home/mose/repo/julia/src/task.c:345 > start_task at /home/mose/repo/julia/src/task.c:1292 > *** This error is usually fixed by running `make clean`. If the error persists, try `make cleanall`. *** > make[1]: *** [sysimage.mk:99: /home/mose/repo/julia/usr/lib/julia/sys-o.a] Error 1 > make: *** [Makefile:120: julia-sysimg-release] Error 2 > Command exited with non-zero status 2 > ``` > > On that commit, Julia uses `fgetenv`/`fsetenv` inside the task scheduler, which matches the stacktrace. However the use of `fenv` [was removed a few days afterwards](https://github.com/JuliaLang/julia/commit/b8ab9f37469d9c19eeac1f9b5d40a499d3a176e8), but this still looks to me like a strong indication that the fenv code on riscv64 is bad. > > CC: [`@xctan`](https://github.com/xctan?rgh-link-date=2025-01-09T21%3A06%3A10.000Z) who introduced this code in [#254](https://github.com/JuliaMath/openlibm/pull/254)