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

    <tr>
        <th>Summary</th>
        <td>
            [mlir] Parser::parseDenseArrayAttr doesn't work when supplied a type for the attribute
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

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

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

<pre>
    `memref.global` hits this case: https://github.com/llvm/llvm-project/blob/fffd966f0b0f6aff879e2fd60cfc75336beb226b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp#L1287

```console
$ cat /tmp/test.mlir
"memref.global"() {initial_value = array<i8: 1, 2, 3, 4>, sym_name = "test1", type = memref<4xi8>} : () -> ()

$ mlir-opt /tmp/test.mlir
module {
  memref.global @test1 : memref<4xi8> = array<i8: 1, 2, 3, 4>
}

$ mlir-opt /tmp/test.mlir | mlir-opt
<stdin>:2:47: error: expected ':' after dense array type
  memref.global @test1 : memref<4xi8> = array<i8: 1, 2, 3, 4>
                                              ^

```

Changing the logic to ignore the supplied type works, but I'm not sure what the desired behaviour is.
```diff
diff --git a/mlir/lib/AsmParser/AttributeParser.cpp b/mlir/lib/AsmParser/AttributeParser.cpp
index 8e7a83a7d273..41a4be10ff16 100644
--- a/mlir/lib/AsmParser/AttributeParser.cpp
+++ b/mlir/lib/AsmParser/AttributeParser.cpp
@@ -835,11 +835,12 @@ public:
 } // namespace
 
 /// Parse a dense array attribute.
-Attribute Parser::parseDenseArrayAttr(Type type) {
+Attribute Parser::parseDenseArrayAttr(Type attrType) {
   consumeToken(Token::kw_array);
   SMLoc typeLoc = getToken().getLoc();
+  Type type;
   if (parseToken(Token::less, "expected '<' after 'array'") ||
-      (!type && !(type = parseType())))
+      !(type = parseType()))
     return {};
   CustomAsmParser parser(*this);
   Attribute result;
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1VtuO4jgQ_ZrwYhE5dsjlgQcaeqSRZrSr2X5vOUkFvJ3Eke10N3-_ZTtAw_RqhpUWmfhWl1OVqgOVao7rKKM99BraeN-pSnS4JwdpDbEHaUgtDER8Qw7WjgYXEfuCYy_tYariWvW46brX07QctfobaovbCo3h1LZtU2ZZSyvaZqJti7wE1jYZrds6X3GeVVAxljnRvpPa2ZFus5OiC4a-Q_8DWlx8_XHe_TGauB7HiPFvCSvyiO4iupmfGQ2jVoNRHcynLMVQLEELth_dE4yNvcf5nl0ngbGIFRErSZQ_yEFahPP8KroJSMR3RGgtjhHfysLlJonYljD34O6RRvzRzebYPw-iDxpo0LlMvOEtsccxnAevaCp9d8Yeoxxl0ebsfYlH8_oqSAzHgV-q8d9j6lUzdeACCHtCrkIkUUo9JO_vFsdvhhnQ5Ls7wCGg7fl-1uBbYxs5OIt8w_Cb5s4jaK20X7yPWAzQoLncF2FORGtBkwYGAwGnz-n_HCm56xOtHj-tzI-H24MY9nLYY7cB6dRe1sQqIveD0uDPzDSOncTQfcm8Kf1iHKZqsuQr5qEng7IohNJvByxwp9KAkRo1KjiIV6kmTaSJbzA0sm3DkVuR5RJbmojbLtyY_k-hDbiTjbVaolsIJ67_yE9t-wuF4FEODbyTAnJRcJE3LOdxnCYirSChbZtkJKE0S9MgvFwu78Z1qsOHMP4jTKwaHGRZ8BVmPMHqYQ_zmpH5cpyqTtauJEN9-Pb1FElc65tR1KeaPE3-1gl4f0Rc1bA4gZnf1_KMjsyA0RXfjG69c3obp-aEkCSeXIX4Lgi8dU7D3UYcjKdbQ1jRjlOnHp7UCwxO1s_e2Mvbc-ghJCp-Ufjr-zdVe0xudp22B3tSR9kYt3gzMxy_QCbkEs0He7J1bOiRfwKiA-ObA0n2mjG2F8bA1Qw091zsAty6EfI9d67DkwSSZhkOnJAUijNtBwQ-Qx75eVzwBzu_oXVhFg120oPPOFLqh7C3k7GqP1dtMKS9lY37mb7J-uV9azBTZy-J_YyCFrBOsiwp6CpL80Wz5k3JS7Gw0nawjlYPvnNWu1_VDmkUGHwhufUshXQEw4W9ROCvVmlPUec6X0y6W9_950IaMwFG_WWVp5wvDmtaclFmZV3mZVWLBnhNuRC0WjVlTrMMFp2ooDMuHPdT77mAYVALuWaUMVqwktGUpnlMmyIrU7aiq0RULS2xy6EXsosdhFjp_UKvPZpq2hu87KSx5nIpjEHyBp84Z19M9qD0Wr-Io8C4Fh752sP-B42Fxfw">