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

    <tr>
        <th>Summary</th>
        <td>
            Error:mlir-translate -mlir-to-cpp -declare-variables-at-top
        </td>
    </tr>

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

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

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

<pre>
    when i run:`mlir-translate -mlir-to-cpp -declare-variables-at-top matmul-emitc.mlir -o matmul-emitc.cpp`,The following error occurs:

![Image](https://github.com/user-attachments/assets/b4d3ea7b-2d65-4ea5-aa46-32db1583bf1b)

The input file as follow:

```
module {
  emitc.func @main() {
    %0 = "emitc.constant"() <{value = 0.000000e+00 : f64}> : () -> f64
    %1 = "emitc.constant"() <{value = 6.000000e+00 : f64}> : () -> f64
    %2 = "emitc.constant"() <{value = 5.000000e+00 : f64}> : () -> f64
    %3 = "emitc.constant"() <{value = 4.000000e+00 : f64}> : () -> f64
    %4 = "emitc.constant"() <{value = 3.000000e+00 : f64}> : () -> f64
    %5 = "emitc.constant"() <{value = 2.000000e+00 : f64}> : () -> f64
    %6 = "emitc.constant"() <{value = 1.000000e+00 : f64}> : () -> f64
    %7 = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.array<2x2xf64>
    %8 = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.array<2x3xf64>
    %9 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
    %10 = builtin.unrealized_conversion_cast %9 : !emitc.size_t to index
    %11 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
    %12 = builtin.unrealized_conversion_cast %11 : !emitc.size_t to index
    %13 = subscript %8[%10, %12] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
    assign %6 : f64 to %13 : <f64>
    %14 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
    %15 = builtin.unrealized_conversion_cast %14 : !emitc.size_t to index
    %16 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
    %17 = builtin.unrealized_conversion_cast %16 : !emitc.size_t to index
    %18 = subscript %8[%15, %17] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
    assign %5 : f64 to %18 : <f64>
    %19 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
    %20 = builtin.unrealized_conversion_cast %19 : !emitc.size_t to index
    %21 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
    %22 = builtin.unrealized_conversion_cast %21 : !emitc.size_t to index
    %23 = subscript %8[%20, %22] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
    assign %4 : f64 to %23 : <f64>
    %24 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
    %25 = builtin.unrealized_conversion_cast %24 : !emitc.size_t to index
    %26 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
    %27 = builtin.unrealized_conversion_cast %26 : !emitc.size_t to index
    %28 = subscript %8[%25, %27] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
    assign %3 : f64 to %28 : <f64>
    %29 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
    %30 = builtin.unrealized_conversion_cast %29 : !emitc.size_t to index
    %31 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
    %32 = builtin.unrealized_conversion_cast %31 : !emitc.size_t to index
    %33 = subscript %8[%30, %32] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
    assign %2 : f64 to %33 : <f64>
    %34 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
    %35 = builtin.unrealized_conversion_cast %34 : !emitc.size_t to index
    %36 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
    %37 = builtin.unrealized_conversion_cast %36 : !emitc.size_t to index
    %38 = subscript %8[%35, %37] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
    assign %1 : f64 to %38 : <f64>
    %39 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
    %40 = builtin.unrealized_conversion_cast %39 : !emitc.size_t to index
    %41 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
    %42 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
    cf.br ^bb1(%40 : index)
  ^bb1(%43: index):  // 2 preds: ^bb0, ^bb8
    %44 = builtin.unrealized_conversion_cast %43 : index to !emitc.size_t
    %45 = cast %44 : !emitc.size_t to !emitc.ptrdiff_t
    %46 = cast %41 : !emitc.size_t to !emitc.ptrdiff_t
    %47 = cmp lt, %45, %46 : (!emitc.ptrdiff_t, !emitc.ptrdiff_t) -> i1
    cf.cond_br %47, ^bb2, ^bb9
  ^bb2:  // pred: ^bb1
    %48 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
    %49 = builtin.unrealized_conversion_cast %48 : !emitc.size_t to index
    %50 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
    %51 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
    cf.br ^bb3(%49 : index)
  ^bb3(%52: index):  // 2 preds: ^bb2, ^bb7
    %53 = builtin.unrealized_conversion_cast %52 : index to !emitc.size_t
    %54 = cast %53 : !emitc.size_t to !emitc.ptrdiff_t
    %55 = cast %50 : !emitc.size_t to !emitc.ptrdiff_t
    %56 = cmp lt, %54, %55 : (!emitc.ptrdiff_t, !emitc.ptrdiff_t) -> i1
    cf.cond_br %56, ^bb4, ^bb8
  ^bb4:  // pred: ^bb3
    %57 = subscript %7[%52, %43] : (!emitc.array<2x2xf64>, index, index) -> !emitc.lvalue<f64>
    assign %0 : f64 to %57 : <f64>
    %58 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
    %59 = builtin.unrealized_conversion_cast %58 : !emitc.size_t to index
    %60 = "emitc.constant"() <{value = 3 : index}> : () -> !emitc.size_t
    %61 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
    cf.br ^bb5(%59 : index)
  ^bb5(%62: index):  // 2 preds: ^bb4, ^bb6
    %63 = builtin.unrealized_conversion_cast %62 : index to !emitc.size_t
    %64 = cast %63 : !emitc.size_t to !emitc.ptrdiff_t
    %65 = cast %60 : !emitc.size_t to !emitc.ptrdiff_t
    %66 = cmp lt, %64, %65 : (!emitc.ptrdiff_t, !emitc.ptrdiff_t) -> i1
    cf.cond_br %66, ^bb6, ^bb7
  ^bb6:  // pred: ^bb5
    %67 = subscript %8[%43, %62] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
    %68 = load %67 : <f64>
    %69 = subscript %8[%52, %62] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
    %70 = load %69 : <f64>
    %71 = subscript %7[%52, %43] : (!emitc.array<2x2xf64>, index, index) -> !emitc.lvalue<f64>
    %72 = load %71 : <f64>
    %73 = mul %70, %68 : (f64, f64) -> f64
    %74 = add %72, %73 : (f64, f64) -> f64
    %75 = subscript %7[%52, %43] : (!emitc.array<2x2xf64>, index, index) -> !emitc.lvalue<f64>
    assign %74 : f64 to %75 : <f64>
    %76 = add %63, %61 : (!emitc.size_t, !emitc.size_t) -> !emitc.size_t
    %77 = builtin.unrealized_conversion_cast %76 : !emitc.size_t to index
    cf.br ^bb5(%77 : index)
  ^bb7:  // pred: ^bb5
    %78 = add %53, %51 : (!emitc.size_t, !emitc.size_t) -> !emitc.size_t
    %79 = builtin.unrealized_conversion_cast %78 : !emitc.size_t to index
    cf.br ^bb3(%79 : index)
  ^bb8:  // pred: ^bb3
    %80 = add %44, %42 : (!emitc.size_t, !emitc.size_t) -> !emitc.size_t
    %81 = builtin.unrealized_conversion_cast %80 : !emitc.size_t to index
    cf.br ^bb1(%81 : index)
  ^bb9:  // pred: ^bb1
    return
  }
}
```
how to fix it?

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMmstyo7wSgJ9G3qhwiRaS8MILx4mrzv7sUwLkmFMYOEIkmf_p_-JqbEczyM54JuWKAV36ou6vQUZWVfqWK7VG7Amx54WszaHQ6_JHRgkhi6hIfqw_DirHKdZ1jl526GmLVhvEyTFLtWe0zKtMGoW97rzw4rLEXqLiTGrlvUudyihTlSeNZ4oSH6U51pmnjqmJl80Q7BXnF-OyRJz0ksLtfw8K74ssKz7S_A0rrQuNiziudYXoBpH2Az5iT_85yjeF2DOC8GBM2TbDDsHuLTWHOlrGxRHBrq6U9qQxMj4cVW4qBDtZVao9iIKEKikiDxLOvEBJ5kkZcI9CEvkspNHejxCsOqGNXmle1gbv00xhWfVanlzU6cZJ_yGbY5HUmcJIPCGywbgzd1_nMUYBOco0RxAiWI0dMEbACEb0GSOA3jtFXhmZGwQw9KZbJJ7eZVartitZkvZPIXgizegN3vMAiWdEX9qzfpzXnDctoyjfVRS_WRS4imI3i6KuooKbRQWuoujNopirKLhZFHcV5d8sSpyLGuhhF4WAdl2LUv6_Vk1z0xcQfbHIQ-B3I6TW8geiW_iEz0YJ-nLSI_wjetArPVbOyd_KSfNEff5KbpX-o17NJPs70kR1mpk0X9a5VjJL_1HJa1zk70pXaZG_xrIyg2Kby7mwKXrRp0mdmXKPBeBgQavZLBM6gFR1VMU6LdvBYVMtG5ch2HaSEXs-KWpfWdj2058OLq3KWl8guj0Lhq5OD-nYJlSj66DfBl8OaFqceXSP85mL84O5zneHzx0mCBcT-FwTQnv8sCF-xOPih13GT2iNn0fiB1zw48_lDzjzB-4wwYU_MJc_YOcPDPyBB_InuIgfsPIHnPlzR_KCC39gLn_AmT_3pIALf2Auf8DOHxj4Aw_kD72MHyt_wJk_d8QPdeEPzOUPdebPPSa48IfO5Q-184cO_KEP5A9cxA-18oc-kj_UhT90Ln-oM3_uqF_UhT90Ln-onT904A99IH_8y_ix8oc-8v4ncOEPncuf4JH3P4Hzrs6t-Rbvl5HGiL1Ekd_27ty3GWOi7XfWTs-aadPc7g5iwKVWSdUKbgZ0TGuOwolpgcPqBPSkSxdkNod1zBjHWakwXiqNTtL9_mwSfj6Jles_naRL_fhY4sz0SRkM2Rnwq9Q8TdF2ub7aL1_qn1YsLvLktVm2RtzoZBiPJosG0wVqlmdcHX-ic_jI9Fy5BEA4Mz3dd3fvSE_3_d1vSE_ap9_Kkp59O4O56XmKFzExjTqsDoOZ6dnv547j6C2Zxc5znJGbJuHX6cmC4YB9d3oyPjo5uKBhf9GWnnSis7iu-6Kr-wwGstCf1334xrpPLup-q9-Xdf9y-_e3goW5gIXNBQt3Bgu93QT-J8DCenDYwNK389lgOUU6n5jmAhY-Fyz8HCz8JrDwc7Dwm8DCvwALH8DCvx0snE-cfM7x_qINLGyi8xdg6R8oAjqo_tsfSBshHSeyQiajXl8Cha-sGo8ofIjGgpxrvLJpLPy_Ad6NUDjTWPhWjbtMPdZZZ-jg1oGY4b6L6_bry98eu6SUSSdosFLQ2ROwv8Fnp4InLndqBbM6j09t52MW-Veq9iibZv9w6VdlQrhsL4hZ2wvX9UAISz0Qc9Aiwqkf2OAH9r1-cKn4YlbFv77hFra6GM65dwvJ1A_BUBAC-E4_hL6DH0JrebP4oX_uD32LH1a_fMTUytQ670aIZ0Q2_f_JGz2H4qNRYZ9-4tQMb_7sENkskjVNVnQlF2rtC8opcE7E4rDeJxHjENG9SpKQRoQkQOIk8KNVpCDcs0W6BgKM-CQkIeOBWEbRnjAKMgllEgQsQQFRR5lmyyx7Py4L_bZIq6pWax-ACH-RyUhlVfs6F0CuPnDbitpfiBZ63QzyovqtQgHJ0spUp2lMajK1ftG60ONLTDe95LWodbb-yTtYjcT-yyt18T8VGwS7Vs8Kwa435H0N_wYAAP__SguNfw">