<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">