<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/145593>145593</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang] ASIND and ACOSD give incorrect results
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tacaswell
</td>
</tr>
</table>
<pre>
There appears to be a bug with the acosd and asind intrinsics(?). Although the following program will compile correctly under flang:
```fortran
PROGRAM ACOSD_TEST
C Program to compare ACOSD with ACOS conversion
IMPLICIT NONE
INTEGER I
REAL X, Y1, Y2, STEP
REAL PI
PARAMETER (PI = 3.14159265359)
C Step size for 15 evenly spaced values
STEP = 2.0 / 14.0
DO 10 I = 0, 14
X = -1.0 + I * STEP
Y1 = ACOSD(X)
Y2 = ACOS(X) * 180.0 / PI
WRITE(*,100) X, Y1, Y2
10 CONTINUE
100 FORMAT('For x = ',F8.4,': ACOSD = ',F8.4,
& ', ACOS(rad->deg) = ',F8.4)
END
```
but when run gives incorrect results:
```
For x = -1.0000: ACOSD = 1.5883, ACOS(rad->deg) = 180.0000
For x = -0.8571: ACOSD = 1.5858, ACOS(rad->deg) = 148.9973
For x = -0.7143: ACOSD = 1.5833, ACOS(rad->deg) = 135.5847
For x = -0.5714: ACOSD = 1.5808, ACOS(rad->deg) = 124.8499
For x = -0.4286: ACOSD = 1.5783, ACOS(rad->deg) = 115.3769
For x = -0.2857: ACOSD = 1.5758, ACOS(rad->deg) = 106.6015
For x = -0.1429: ACOSD = 1.5733, ACOS(rad->deg) = 98.2132
For x = 0.0000: ACOSD = 1.5708, ACOS(rad->deg) = 90.0000
For x = 0.1429: ACOSD = 1.5683, ACOS(rad->deg) = 81.7868
For x = 0.2857: ACOSD = 1.5658, ACOS(rad->deg) = 73.3984
For x = 0.4286: ACOSD = 1.5633, ACOS(rad->deg) = 64.6231
For x = 0.5714: ACOSD = 1.5608, ACOS(rad->deg) = 55.1501
For x = 0.7143: ACOSD = 1.5583, ACOS(rad->deg) = 44.4153
For x = 0.8571: ACOSD = 1.5558, ACOS(rad->deg) = 31.0027
For x = 1.0000: ACOSD = 1.5533, ACOS(rad->deg) = 0.0000
```
A similar with ASIND gives:
```
For x = -1.0000: ASIND = -0.0175, ASIN(rad->deg) = -90.0000
For x = -0.8571: ASIND = -0.0150, ASIN(rad->deg) = -58.9973
For x = -0.7143: ASIND = -0.0125, ASIN(rad->deg) = -45.5847
For x = -0.5714: ASIND = -0.0100, ASIN(rad->deg) = -34.8499
For x = -0.4286: ASIND = -0.0075, ASIN(rad->deg) = -25.3769
For x = -0.2857: ASIND = -0.0050, ASIN(rad->deg) = -16.6015
For x = -0.1429: ASIND = -0.0025, ASIN(rad->deg) = -8.2132
For x = 0.0000: ASIND = 0.0000, ASIN(rad->deg) = 0.0000
For x = 0.1429: ASIND = 0.0025, ASIN(rad->deg) = 8.2132
For x = 0.2857: ASIND = 0.0050, ASIN(rad->deg) = 16.6016
For x = 0.4286: ASIND = 0.0075, ASIN(rad->deg) = 25.3769
For x = 0.5714: ASIND = 0.0100, ASIN(rad->deg) = 34.8499
For x = 0.7143: ASIND = 0.0125, ASIN(rad->deg) = 45.5847
For x = 0.8571: ASIND = 0.0150, ASIN(rad->deg) = 58.9973
For x = 1.0000: ASIND = 0.0175, ASIN(rad->deg) = 90.0000
```
f77 and f90 versions of both are in https://github.com/tacaswell/flang-intrinsics-bug
This code gives the correct results with gfortran.
I've tested this with:
```
$ flang --version
flang version 20.1.7 (Fedora 20.1.7-1.fc42)
Target: x86_64-redhat-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
```
but saw the bug on windows with (I think) flang 19 from conda-forge. I can systematically test if needed.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUV91u8joWfRpzs0VkO3Z-LrjI4ecI6ZQiymi-c_XJEBM8ExJkJ6Wdpx_ZSWkhoempEA2298ray8s72cIYlRVSThD_A_HZSNTVsdSTSuyFucg8H-3K9H2yPUotQZzPUmgDVQk7CQJ2dQYXVR2hOkoQ-9KkIIoUhFFFCqqotCqM2htEI-QvEI09gCSvjmWdNSGHMs_LiyoyOOsy0-IEF5XnsC9PZ5VL2Jday32Vv0NdpFLDIRdFhvwEEE7sJ8DN51DqSosC4QTWm-c_N8kTJNPnl9nv7fxli3AyBfu3bm9Rle4GQstmVZOBvYR9WbxKbVTpsJZP67-W0-UWVs-ruR1wf8vVdv7nfAPL68hmnvwFvxCdwt_EfVP7_bKdr2-XrF3IOtkkT_PtfAOIRuslIH8GvkcY4TENuM9jRONr3JX8SyXPYNT_rGYaCAf5Kov8HcxZ7GUKryKvpbmG2Xs7YOphQHQBhHn4K2hzMXsGgqGhgC1nwuzcLzcwJi72DztPk9t0AOBv4lY5BRGNfn1lbafpdbqddSgkwi2j9fLr8q_X_94st3NrGZogOiUY2-BbeXFiiQNMn1fb5epf85vUCMYAi-fNU7J1KOGi1PDm6CAaIjpdRB5DdGp_-Enrge5sC4lo8MHRTX-kpEU6Rv48lZnL7S487oo9X82-erax8K6u4HKUBei6gEy9SgOqaG0PWpo6rwzykzu_I5x85uQ2CmN8mwsA8XgU-d8ydrthQ2_xsBfxkPTh8eh7PBZ5cRz6HbyQML8Pzx_g53OPRyzs4PGQsD48PMCPMi9icdzBYzQKevDCIf0I9_ww6OLRiN95y6INqYcDL8CEd9AIo3EfuwH1II48Snx6iwf4kVvCAfUg7nMLPOQXDKgXES-MgqgD1xWvgRuQD0Lf8-OIdfAebG4wJF_AvID6pIP3wHzBkHyce4TjLl73cBCP8wHxgDGPEe530B4cXT6knm-rCL07avCwtPAh9eBqlruSl4BRJ5UL3T53X5arWVP6_kmhc1EfBwSTkDs2L8tVL5txr3W_FrornoPj-Hs4PlTn7ujRAXpsqM7d4eEBfv5QnbvFw0Py0aE6d4c3pB8ZqnR3eAP6wXio0n3ifYx-iwdDle6K9xN28IBdj3rwA_WgUS94XOju8AZ2F3p3F3rdBz9wX6_5oPdwwA8OB_QeDug7uw3ekHy9hxd6awv8oLZ8eSzeVbpDGLp26BBjaNsKA-UBdmV1BNt-qAKOVXV2hY8uEF1kqjrWO29fnhBdXDswRBeu8xl_dlTjXZ01N9kelYF9mcr29dG2VXcvkE2hzdouyWviloiGrxIqaSqZQmVR7LLeGowoa3ovGI8_-6NmpP0NFHvEC21Ps5BpqUU7MCbeYc9o80a8FTqTldX4LQp-B2ysZXoU1ThXRf02zora5aOlSOFUpjK3K8-lUW-Wb2EqkecynSntWkC6qI1GdLFTRf97tREXp4ZtUssCLqpIy0srBqLR0iZd_NduY5MJieGgy5NtAlMxPpQ6kx4sYS8KMO-mkidRqb3I83cnGqgDFFKmMrWCjtKJn8Z-LEZyQkKOwziMGR4dJzvBDzxOD0HKpKRBKDE7MLlPAyYo5akcqQnFlOOAMooZZ9ZwgkriR2QX7YIgkIhheRIq9_L89eSVOhspY2o5IYzz2B_lYidz45p3SpsGmVLbx-uJDbBGMYjhXJnKfEJUqspdx99E8FnremvX5klv3dTtRUa1ziffeNbeoP03PuvyP3JfIbpwhA2ii5bz64T-PwAA__97JClD">