<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/88756>88756</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Flang] IEEE arithmetic exceptions signaled on netlib MINPACK test case
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
luau-project
</td>
</tr>
</table>
<pre>
## Contact
* this board
* luau dot project at gmail dot com
## Description
During the development of a PKGBUILD script to add netlib MINPACK library
into MSYS2 package repositories, I noticed that
the output generated by flang on MINPACK test case (```tchkder.f```)
differs from gfortran's output. To investigate further, I tried
to reproduce the same behavior on a linux machine, and I got there.
In short, with flang, there is
```txt
Fortran STOP
IEEE arithmetic exceptions signaled: INEXACT
```
at the end of test execution.
## System information
I found the same behavior on three different systems:
* Debian 12 stable (amd64) + flang-16 package from debian repositories
* Debian 12 stable (amd64) + LLVM 18.1.3 compiled from source code
* Windows 11 running an up to date MSYS2 environment for clang on x86_64 architecture (clang64) and [flang version 18.1.3-1](https://packages.msys2.org/package/mingw-w64-clang-x86_64-flang?repo=clang64)
## Expected (gfortran) output
```txt
FVEC
-0.1181606D+01 -0.1429655D+01 -0.1606344D+01
-0.1745269D+01 -0.1840654D+01 -0.1921586D+01
-0.1984141D+01 -0.2022537D+01 -0.2468977D+01
-0.2827562D+01 -0.3473582D+01 -0.4437612D+01
-0.6047662D+01 -0.9267761D+01 -0.1891806D+02
FVECP - FVEC
-0.7724666D-08 -0.3432406D-08 -0.2034843D-09
0.2313685D-08 0.4331078D-08 0.5984096D-08
0.7363281D-08 0.8531470D-08 0.1488591D-07
0.2335850D-07 0.3522012D-07 0.5301255D-07
0.8266660D-07 0.1419747D-06 0.3198990D-06
ERR
0.1141397D+00 0.9943516D-01 0.9674474D-01
0.9980447D-01 0.1073116D+00 0.1220445D+00
0.1526814D+00 0.1000000D+01 0.1000000D+01
0.1000000D+01 0.1000000D+01 0.1000000D+01
0.1000000D+01 0.1000000D+01 0.1000000D+01
```
## Actual (flang) output
```txt
FVEC
-0.1181606D+01 -0.1429655D+01 -0.1606344D+01
-0.1745269D+01 -0.1840654D+01 -0.1921586D+01
-0.1984141D+01 -0.2022537D+01 -0.2468977D+01
-0.2827562D+01 -0.3473582D+01 -0.4437612D+01
-0.6047662D+01 -0.9267761D+01 -0.1891806D+02
FVECP - FVEC
-0.7724666D-08 -0.3432406D-08 -0.2034843D-09
0.2313685D-08 0.4331078D-08 0.5984096D-08
0.7363281D-08 0.8531470D-08 0.1488591D-07
0.2335850D-07 0.3522012D-07 0.5301255D-07
0.8266660D-07 0.1419747D-06 0.3198990D-06
ERR
0.1141397D+00 0.9943516D-01 0.9674474D-01
0.9980447D-01 0.1073116D+00 0.1220445D+00
0.1526814D+00 0.1000000D+01 0.1000000D+01
0.1000000D+01 0.1000000D+01 0.1000000D+01
0.1000000D+01 0.1000000D+01 0.1000000D+01
Fortran STOP
IEEE arithmetic exceptions signaled: INEXACT
```
## Reproduction steps on Debian 12 (stable) + LLVM 18.1.3 compiled from source code
### Summary
* [Download and extract netlib minpack as initial setup](#download-and-extract-netlib-minpack-as-initial-setup)
* [Build and test netlib minpack with flang](#build-and-test-netlib-minpack-with-flang)
* [Build and test netlib minpack with gfortran](#build-and-test-netlib-minpack-with-gfortran)
### Download and extract netlib minpack as initial setup
```bash
cd /tmp
wget https://salsa.debian.org/science-team/minpack/-/archive/debian/19961126+dfsg1-5/minpack-debian-19961126+dfsg1-5.tar.gz
tar -xf minpack-debian-19961126+dfsg1-5.tar.gz
chmod +x minpack-debian-19961126+dfsg1-5/configure
```
### Build and test netlib minpack with flang
> [!NOTE]
>
> In the following, I am assuming that LLVM, Clang and flang 18.1.3 are installed at ```/opt/llvm-18.1.3```. For detailed system info, see [Supplementary information](#supplementary-information).
1. Build minpack with flang
```bash
cd /tmp
rm -rf flang-build-minpack
mkdir flang-build-minpack
cd flang-build-minpack
INSTALLDIR=/opt/llvm-18.1.3
FLANG_MINPACK_INSTALL=/tmp/flang-minpack-install
export LD_LIBRARY_PATH=$INSTALLDIR/lib
../minpack-debian-19961126+dfsg1-5/configure \
F77=$INSTALLDIR/bin/flang-new \
--prefix=$FLANG_MINPACK_INSTALL \
--enable-shared \
--enable-static
make
make install
```
2. Test minpack built with flang on test file ```tchkder.f```
```bash
cd /tmp
rm -rf flang-minpack-test
mkdir flang-minpack-test
cd flang-minpack-test
INSTALLDIR=/opt/llvm-18.1.3
FLANG_MINPACK_INSTALL=/tmp/flang-minpack-install
FLANG_MINPACK_INSTALL_LIB=$FLANG_MINPACK_INSTALL/lib
export LD_LIBRARY_PATH=$INSTALLDIR/lib
$INSTALLDIR/bin/flang-new \
-o tchkder \
../minpack-debian-19961126+dfsg1-5/ex/tchkder.f \
-L"$FLANG_MINPACK_INSTALL_LIB" -lminpack
export LD_LIBRARY_PATH=$FLANG_MINPACK_INSTALL_LIB:$LD_LIBRARY_PATH
./tchkder
```
3. Observed output with flang
```txt
FVEC
-0.1181606D+01 -0.1429655D+01 -0.1606344D+01
-0.1745269D+01 -0.1840654D+01 -0.1921586D+01
-0.1984141D+01 -0.2022537D+01 -0.2468977D+01
-0.2827562D+01 -0.3473582D+01 -0.4437612D+01
-0.6047662D+01 -0.9267761D+01 -0.1891806D+02
FVECP - FVEC
-0.7724666D-08 -0.3432406D-08 -0.2034843D-09
0.2313685D-08 0.4331078D-08 0.5984096D-08
0.7363281D-08 0.8531470D-08 0.1488591D-07
0.2335850D-07 0.3522012D-07 0.5301255D-07
0.8266660D-07 0.1419747D-06 0.3198990D-06
ERR
0.1141397D+00 0.9943516D-01 0.9674474D-01
0.9980447D-01 0.1073116D+00 0.1220445D+00
0.1526814D+00 0.1000000D+01 0.1000000D+01
0.1000000D+01 0.1000000D+01 0.1000000D+01
0.1000000D+01 0.1000000D+01 0.1000000D+01
Fortran STOP
IEEE arithmetic exceptions signaled: INEXACT
```
### Build and test netlib minpack with gfortran
1. Build minpack with gfortran (assuming gfortran is on ```$PATH```)
```bash
cd /tmp
rm -rf gfortran-build-minpack
mkdir gfortran-build-minpack
cd gfortran-build-minpack
GFORTRAN_MINPACK_INSTALL=/tmp/gfortran-minpack-install
GFORTRAN_MINPACK_INSTALL_LIB=$GFORTRAN_MINPACK_INSTALL/lib
../minpack-debian-19961126+dfsg1-5/configure F77=gfortran --prefix=$GFORTRAN_MINPACK_INSTALL --enable-shared --enable-static
make
make install
```
2. Test minpack built with gfortran on test file ```tchkder.f```
```bash
cd /tmp
rm -rf gfortran-minpack-test
mkdir gfortran-minpack-test
cd gfortran-minpack-test
GFORTRAN_MINPACK_INSTALL=/tmp/gfortran-minpack-install
GFORTRAN_MINPACK_INSTALL_LIB=$GFORTRAN_MINPACK_INSTALL/lib
export LD_LIBRARY_PATH=$GFORTRAN_MINPACK_INSTALL_LIB
gfortran \
-o tchkder \
../minpack-debian-19961126+dfsg1-5/ex/tchkder.f \
-L"$GFORTRAN_MINPACK_INSTALL_LIB" \
-lminpack
./tchkder
```
3. Observed output with gfortran
```txt
FVEC
-0.1181606D+01 -0.1429655D+01 -0.1606344D+01
-0.1745269D+01 -0.1840654D+01 -0.1921586D+01
-0.1984141D+01 -0.2022537D+01 -0.2468977D+01
-0.2827562D+01 -0.3473582D+01 -0.4437612D+01
-0.6047662D+01 -0.9267761D+01 -0.1891806D+02
FVECP - FVEC
-0.7724666D-08 -0.3432406D-08 -0.2034843D-09
0.2313685D-08 0.4331078D-08 0.5984096D-08
0.7363281D-08 0.8531470D-08 0.1488591D-07
0.2335850D-07 0.3522012D-07 0.5301255D-07
0.8266660D-07 0.1419747D-06 0.3198990D-06
ERR
0.1141397D+00 0.9943516D-01 0.9674474D-01
0.9980447D-01 0.1073116D+00 0.1220445D+00
0.1526814D+00 0.1000000D+01 0.1000000D+01
0.1000000D+01 0.1000000D+01 0.1000000D+01
0.1000000D+01 0.1000000D+01 0.1000000D+01
```
## Supplementary information
### Installed debian packages
The full list of packages installed on my machine taken from ```apt list --installed```:
[apt-list-installed.txt](https://github.com/llvm/llvm-project/files/14981679/apt-list-installed.txt)
### flang 18.1.3 compilation instructions
Since only flang 16 is on Debian 12 stable repositories, I had to compile flang 18.1.3 myself
to test the described behavior.
<details>
<summary>flang 18.1.3 compilation instructions</summary>
The steps described here follow more or less the instructions found on
[https://github.com/llvm/llvm-project/blob/main/flang/docs/GettingStarted.md](https://github.com/llvm/llvm-project/blob/main/flang/docs/GettingStarted.md),
but with tests disabled to speed up compilation, and ``-DFLANG_ENABLE_WERROR=OFF`` because it was failing on my machine.
```bash
cd /tmp
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.3/llvm-project-18.1.3.src.tar.xz
tar -xf llvm-project-18.1.3.src.tar.xz
mkdir build
cd build
NPROCS=4
INSTALLDIR=/opt/llvm-18.1.3
export LD_LIBRARY_PATH=$INSTALLDIR/lib
cmake -G Ninja \
-DLLVM_PARALLEL_COMPILE_JOBS=$NPROCS \
-DLLVM_PARALLEL_LINK_JOBS=$NPROCS \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INCLUDE_BENCHMARKS=OFF \
-DFLANG_INCLUDE_TESTS=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$INSTALLDIR \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,$LD_LIBRARY_PATH" \
-DFLANG_ENABLE_WERROR=OFF \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_TARGETS_TO_BUILD=host \
-DLLVM_LIT_ARGS=-v \
-DLLVM_ENABLE_PROJECTS="clang;mlir;flang;openmp" \
-DLLVM_ENABLE_RUNTIMES="compiler-rt" \
-S ../llvm-project-18.1.3.src/llvm -B .
cmake --build . --config Release
sudo cmake --install . --config Release
cd /tmp
mkdir build-compiler-rt
cd build-compiler-rt
CC=$INSTALLDIR/bin/clang \
CXX=$INSTALLDIR/bin/clang++ \
cmake \
-G Ninja \
../llvm-project-18.1.3.src/compiler-rt \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$INSTALLDIR \
-DCMAKE_CXX_STANDARD=11 \
-DCMAKE_C_CFLAGS=-mlong-double-128 \
-DCMAKE_CXX_CFLAGS=-mlong-double-128 \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DCOMPILER_RT_BUILD_ORC=OFF \
-DCOMPILER_RT_BUILD_XRAY=OFF \
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
-DLLVM_CONFIG_PATH=$INSTALLDIR/bin/llvm-config
cmake --build . --config Release
sudo cmake --install . --config Release
```
</details>
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW1tz4riz_zTOi8ouW77ykAcudv7sEEgBs5vZF0rYArTjCyXJuZxPf0qSDQYMIWR2T536b2prai33Ta3u1q9lgRgj6xzje83tae7gDpV8U9D7tESlvqXFXzjmd8sieb_XoK1BG_SLnKOYa-ZAM7vVv7AL-IYwsCwQTfZjQgZICg4qOQBxsM4QSeVgXGSHQqT4AWYxJVtOirz5dlBSkq8B32CQ4BecFtsM5xwUK4DA07eH3vfhaAAUJ-AFQEkCcsxTsgSPw_FTt_8NpGRJEX1X4kjOC_A4-zGDYIvin2iNAcXbghFeUIKZBvtgCPKCkxgngG9QNV2hvij5tuRgjXNMEccJWL6DVYryNSjynTKOGQcxYhhoMNA8U_3H483PBFNjtRvRYEdJTshqhSkDK1pkYL0qKKco16DPKn0GmBeA5C-YcbJGHINVSfkGU2UppwRXfueFmAktkjLG0l0MZRgs8Qa9kIIKGxFISV6-gQzFG5JjIQHlCRiCdcEFB8VG0_PDHLBNQbmgeyV8oyYrniQtIKyi3s3yrfJWpGYBZvPJUyUrDEOAKOGbDHMSA_wWY7nUDIggRClONLsLhuPwudufH8lVj0jaCHCeiMWXfsZvOC6FFKMlnmbvjOMMkHxV0Awdh9UQrIoyT9odxTcUY6BWRgQbk6KYZjfCfoCXBOXAgoBxtEzleqMs8RwNdoAGe8pbuuXt4kyucKLYDmLuepmj0e-PwAoMy7BFFm1JihMllxUljTGIiwTv5f1B8qR4ZcCyAC3zXOQRykG5FYmSiFhSiYDzF0KLXObVqqAgroP6LfAWngMQjTeE45iXVJok3yujRPxobk-lwQumjBR5ZaBuae5Ag8GG8610HYw0GFXOYEbG3hk0CrreD2owyki-ftVfPUeXSnRlga4iz46E2zR7sDegZd3Dty2ORXpqMNjnU6dKpwOGk8BV_wL5F_0e9g9GddOwrMDyTG-gwZ5pyQEHdjzXbQx4pmc7jhpoihPvfMeFXqdBHDim5zqNgQ603MBr5-4EjuVYe2JoQujafmPA8YKO77dywwD6rgf3xLbj227QGHAc2_cseMCtm4ZnOr7XZOxAz_c9qzmLjhVUToHtfnwC-qk_a9N8Hzqe5w10M1CG2dAxd4_QtJ3AsQe6WS02MA1oW7YXuJIEmIZj25bpB_Wj2wkcsyMFNDUB0_Btz4aBJQlNI3Bty_HNms1ygsDtiJf-ERu0bTdwBaEvHm0XQtOC8tE0XNu0oOu2sAXQ8zxvx2Y5Vsd3_IFuelKK1Qk6HfHWO_BKOJ2eekmwW45ld9TimmKg03Fs1xLTtOSj5zuO74jHnZ86ncB0pEpJYpm-bVneXoQFoek4KnrNY30u9ALLqYgFs_yrlv144Jj5IvHfwNy6YxyUhW7MS5SKolBtY7-gIuxS8_9dWbi5ItRq_76ycENF2Cfqvi7cWBaO6sKNZaG1LtxaEeTfcVm4pSDUhjfLwpeqwq9N7DPcN_L9jUj0oK5MK8wtRADG8ZYJ5LRHchoMFJi7BcM1FElIW2bZrpPZwzzN7Q2K1zwtUCIBGX7jFMW87oMykguABRADJCecoBQwzMutgmcatJOKWUd5olfMumLWK2YdMb1i1hXzDnspA3olSZV2icyPVDfah1rpUjBIjYLhWJ1g0OtC_VlFO9T3CV0NpNju-5s83La1LBHbqKFYYNSIZwd0r2vMwSFmZihlyFCdQ4WYWUxwHmOdY5Qp2CwM0GCkazCSeP1FwGnFo8HI6nQ8y4KeBnvJiq0t3d1z6YpKP6UxOKLG-n-a5nFEgf62ArfwxpusEFPuvX3MrsEoLvIVWZcUf5iEYn2uDsAmtx2KkNKgNZ7MQxEu--Hd_w1z2SSuijQtXolqgIcAZQAxVmbqbAJxmdbiVV-2QsIO1RRVmY5Ew5wzjlKR7oiDxklAVGy5BqM0fcl0Rb57aYCooCDBHMkywfY9rdDFMBb2z8rtNsWifUP0_aDhrROANSn0JgXsHPTOllE58pzjRCVvCWUx3BrO4gXNgE5XVUOscrEO2CPK7GdC6DWEcXIN1XA8m3dHo8FwqtmDVj83GaJRd_ywqA5yFhWvYhSTgpHSWIdutZrHOvHbtqAcjAaL0bA37U5_LJ668_9IMU7DHhilZHnAaxjXpGQzL4Dm9mvbfb9FxZLkO7Nz_NqgFyBO31K8Im-Kr3Xyxww4FxuZzjaIiv66_SVHnMQnC4t-HuxpcgAcuPAgstQQNMBcJHMdjGKxeSMk5VmNIFiRFINLp21H5nwpgus1EpovBfAlul38XiL6x8O3VYSI4wsx0hLJX8kCsThXR7FegGqtD4Px6lTCb8I7dbg0JY80CM9NWXoEQqCnZ-rOpdlf8HFXg84xz0GF2Bt7NmVsA0yWDNMXnNQH1u17H7jc657rdr_a736h4_3aGdgXTsHAr-t6PzoOu-lArLX_PWqAz_e_lxvg1g74873vTlWzBf5cB3zaA-8by4NW-OpO-KMTskut8Me98K9tZ8GZLvozzbAMv5OGWO40NzTFLcXnBky-67s-BKE1pfwoUkPv3SCRbXcDVDuyfJ58bvsyBqg1XgNkr6CNk2uoHqLJdD7tji9t7zsxl3b4c4L2m_xZVb8EsSqculu1Qwx6TvUJ8rwENk-QZoU-PwSbH0LOndX_MOo8WdjzwPMq0mbInaX7esTJGf_KqGsIvASwLio7csW-phz0Mm2w8tdhyosGQnhkSyvG_AoSbKu4_4LBf8Hgv2Dwvw4MXvqucf5QsRXqDXdnm9UNl_qiR5N8vsFgVaYpSAmTV7hqosbRaJGD7L2-ogQ4-olz9XVkZyzaciVA13ds-5nY3frs1u2hLdcF5Z7OEPWt5VrKmvBNuTTiIqtOWOqDluoCmwYjsdszDUaW0wksz-9oMDoj_9wnhIMDYfXpR3pUzp6qT0gH_pqRPMagyNP6opnlVUD35KbQ6SW2DUoAL-pPTIfKs3eG05VSwguFZtQNOxZTssTJ7jrU4c0qu6-Ooplmh7shVn2VssPrJmj3NRjtmY4DRH1D21si75qp03eQFRSDgoIUMyYNbgqubnTtItTtfXqNl2mxFNs82h85aTBKilgs_APmnOTrGUeU48TIkhsD6ZNKYEeD1eawrPdwsWAMJISJtZfLzLYYJ6DcNt1eX_BTmaEP1NFTOO72RuHij3A6nUw1ezCJIkUAljhGJcOAcPCKGFghkhJ1yLrPyMN4uP2b1hV-ojjFiMmcq79QVkQFXdcnoIdc1ajBaCy_P721fru6nkOhatmXNYfj5HRs_DSd9GeaPXCao586wr310DSW_Y3-AMYk_wvt8aM-GI1-f1w8dafd0SgcLfqTx6fhKFz8NunNlFRl9HmO0XD87WPy4bg_-j4IF_NwNp-piDpLEz53H59G4UdkvXDc_89jd_qthVCF8QdK-4_db-FC3g5ezH88hZo9mKp4OqWq8ffTNIyGz8f-PqXvPz8vZvPueNCdDjR7YPmnJOHz02Q633m8P3l87I4H0s5xu0Dp6mjUfVC-hvofqQb7Ot0ivhEF4PRouNkqXEjuEx9XNN3ZLJzOh5PxqVWSbN6dPoTz2WI-UW7U7MGmYPyEbjScL7pTabb-ck7Z03TyW9ifV3OL1XXOXpYSqtm96nZnr9jiXDSW8JyU6ffxfPgY1lLUzkZ1yg95ZqpZO5Pm1Rug94DRkkXqFAYYQNfVsQWo4qZJy8qkADVDtfl_wNJaGBv1RW9Op6XWnHvf75_98Kfu8e780n8-ie1DUg32NNjbM6gJ7v16UmA-cHPD4v-r1LRaSBb9Os30LC3ytZ4U5TLFugWDdoGfob868RXBdDGdV66YTPstZeyE7Hna_XEN3WP4-DSdRNeQjoa96Puff4YtBeOUeNYdD-fDP8PpuRLen4yj4cO5rUuFm4wZlSv_TAoeNToSgh5D2bvk3k46dgfd4XvLt0T_CYPgbnPvLH1oY2zaTrxMrMRNEhz42LI7y9j0XTe-I_fQhI7pWK7lQccJDMdbmY6JPBe6QbKKTc0xcYZIaoiJGwVd3xHGSnwfBL7r3aVoiVMmf4YDYYUHoeYO7ui9dNSyXDPNMUWnwfYSOOGp_O1OVN2ruuYUX4C5o5_H7H6xclfS9P7TKE1ORGA0OZf_DQAA__8MYet5">