<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/60395>60395</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [flang] Compiler emits incorrect arguments for CHARACTER type in llvm
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          MucTepDayH16
      </td>
    </tr>
</table>

<pre>
    ```
flang-new version 17.0.0 (https://github.com/llvm/llvm-project.git 3af9dfe464446da8e9acea45681df28b18583370)
Target: x86_64-unknown-linux-gnu
```

Given the following code `a.f`:
```fortran
      SUBROUTINE AR(TRANSA,TRANSB,LDA)
 CHARACTER TRANSA,TRANSB
      INTEGER LDA

      PRINT *, TRANSA, TRANSB, LDA

      END
```

Building with `flang-new -c a.f -emit-llvm -S` produce this llvm ir:
```llvm
...
define void @ar_(ptr %0, ptr %1, ptr %2, i64 %3, i64 %4) {
  %6 = insertvalue { ptr, i64 } undef, ptr %1, 0
  %7 = insertvalue { ptr, i64 } %6, i64 %4, 1
 %8 = insertvalue { ptr, i64 } undef, ptr %0, 0
  %9 = insertvalue { ptr, i64 } %8, i64 %3, 1
  %10 = extractvalue { ptr, i64 } %9, 0
  %11 = extractvalue { ptr, i64 } %9, 1
  %12 = extractvalue { ptr, i64 } %7, 0
  %13 = extractvalue { ptr, i64 } %7, 1
  %14 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr @_QQcl.2F726F6F742F6C617061636B2D72656C656173652F612E6600, i32 5)
  %15 = call i1 @_FortranAioOutputAscii(ptr %14, ptr %10, i64 1)
  %16 = call i1 @_FortranAioOutputAscii(ptr %14, ptr %12, i64 1)
  %17 = load i32, ptr %2, align 4
  %18 = call i1 @_FortranAioOutputInteger32(ptr %14, i32 %17)
 %19 = call i32 @_FortranAioEndIoStatement(ptr %14)
  ret void
}
...
```

Arguments `%3` and `%4` denote the lengths or CHARACTER arguments and are unused, but this is not what expected in case of single character in arguments in `a.f`. It is also depicted in `_FortranAioOutputAscii` call, where the value `i64 1` is passed as length. This leads to unsound function signatures in ffi. For example, it is expected for `dgemm_` subroutine from BLAS to receive `13 x ptr` as arguments, but flang generate function with `13 x ptr` and `2 x i64` for it, since in has two `CHARACTER` arguments.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVktz46oS_jV402UVQhKSF14ofsykam7mTuJZp7BoydwrgwtQ4vn3p0CJX_M4M-ekUgkC-uuvu-mHcE51GnFOijtSLCdi8Dtj5_8Zmg0eluLbx5RPtkZ-mxNO337pktC67YXuphpf4QWtU0ZDWiY0oUBYtfP-4EhWE7YmbN0pvxu2SWP2hK37_uX93_Rgzf-w8UmnPGSinckWc57nOZeiwploUOQFr1LZsmqbVkWVZSUlbDbq3wjboSdZDceKP_N8Ouj_a_Oqp73Sw3Ha6WG8d0N7_PtBvaAGv0NoTd-bV6U7aIxEIJyKpA23s_pGvjXWW6HHXYg_T1_vHj9_3dw_rKB-JKzaPNYPTzVhi7i4I2zxaVmfGMPiY_1YLzarR7i9eIF5_7BZfVg9QpC8YDwe_vfx_mEDhAXRMwic1P1YavWw_IUv7gbVy-CAV-V3wQHnyE4bEEkLU9wrPw0hg-kT4RQO1sihQfA75SDuK_u9w2Ko41aSJONCYqs0wotREkhOhX0mrDp4C4QVNPB_W6cXaxbWiudhnV2sc8JmQMqT8wgrOJBsCUo7tP5F9AOG84BzEiuXMGiJ7a0ueoFS_g5K0HZNZgHpGwhhRfVPmNBbJrPfZFLduii9AElpRMGjt6L5JczsVn-a_pHolVb2u6Lld1qzPxK90ppH0Ub0_ejUnD6vx7ytlbnDTunV0aPVov-knP88-MPgCatUxmB6fnQ5ff7ypekTti4ZX_N1mbM1X_C0pDzlGb9jy5Lxgi94wdMy4wVb85StOKcxggGsOGd95FWcean0htbIonaNUudsSPPLJ0rfDU9vcPm_w2U_wx1zoDdCBnNus1H0qtOQXwpUf0vkXnvs0Aa0azLBX1HnmUP4nF0ghhtXkCst782TFx73qP014skQiz6Wmre6VC5vqtEPy2FtuyFgulAKYz5xCkLLt888fErUxmPsHz3qzu8cGHtR3sUJIwgKizDowaEM1m4HP9ZN5UAbD6874QGPB2w8SlAaGuEQTAtO6a5HaHYipAHacHYGVvrcqxK49wFO9M6AxIN6hyL8Z--B0-jZQOh1h3a05S3VOB1fBKcB9CCcQwnCvZmawCZWfRTSgTcwaGcGLaEddOPDGBDGCeEHi5Fk26oE1sYCHsX-0GMMeGR7srk1NiiVHe73z0GrG7bWDD50itaaPdx9qp-CKosNqpfIMM3gGAtCCI47--Xdw7GHQYcarfB4Jvfe467kx-AyOIZUCDuBkfIByyndYLBjJxz4VxMunuIchd81JxM5z-Qsm4kJzlNeFmnKWF5OdvM0lWWBRZbPZuUsbahEmaEQFLeN4LRpJmrOKMtomlFGi5KVScMqwQtRtRxLmZWS5BT3QvVJaKmJsd1EOTfgnNNsVkx6scXexfmNsdC24yFhLIxzdh5Hre3QOZLTXjnvzihe-T4OftFdpFjCwuwPqkcLoeWHADbGWmz8xctrr566_3aI_gmYk8H28z-b_QhbR7aOsHW05q8AAAD__0AxBt4">