<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61193>61193</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mlir asmprinter] OpAsmDialectInterface doesn't handle UnitAttr correctly
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir:core
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
lattner
</td>
</tr>
</table>
<pre>
I recently tried to introduce a UnitAttr attribute to an op, and got a crash in OpAsmDialectInterface. UnitAttrs are weird in that they can (validly) be null. The ODS generated print method looks like this:
```
FooOp::print(...) {
5496 _odsPrinter << ' ';
5497 _odsPrinter.printAttributeWithoutType(getNameAttr());
5498 _odsPrinter << ' ';
-> 5499 _odsPrinter.printAttributeWithoutType(getIsUnitPropertyAttr());
5500 _odsPrinter << ' ' << ":";
5501 _odsPrinter << ' ';
```
which is unconditionally printing the unit attr even though it may be null. The asmprinter then goes on to call `AliasInitializer::visit` to see if there is an alias for the attribute, which then crashes in `BuiltinOpAsmDialectInterface::getAlias` which assumes the attribute is non-null:
```
LogicalResult AliasState::getAlias(Attribute attr, raw_ostream &os) const {
auto it = attrTypeToAlias.find(attr.getAsOpaquePointer());
if (it == attrTypeToAlias.end())
return failure();
it->second.print(os);
return success();
}
```
I'm not really sure what level is supposed to handle the null, but something should.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVcFu4zYQ_Rr6MohAU5YsHXzwxjUQoGgW3S16XNDSWGKXIlVymMD9-mJoO8kaabqATEP243sznDdDHaMZHOJGVJ9EtVvoRKMPG6uJHIbFwfenzQME7NCRPQEFgz2QB-Mo-D51CBr-cIa2RAE0UTCHRMgI7cDPQt2Ddj0MnkBDF3QcwTh4nLdx2hltsaMHRxiOusMCXpgi6IDwjCb0DKdRE9CIJ-i0A6GaJ21Nb09CtXBAcMnaAuDriPC4-wIDOgyasIc5GEcwIY2-B-v99wjWfEeg0URRboXcCXlda3l58uve-8eZIeU2kwjVFEXBemL96QwBqFZtLWQL8M338TPDMIAo70V5D0Kt-SPKK7patetbcJG5t9dT-9PQ6BN9Pc0oVDMg_aYn5H-FaoRq-Xmhy-oNE_6E-J0of2F8e4P_P_2HyAX5HPyMgU7_HUkl5ceRvL4qPlRef9i-_NljvCnTeX0eTTeCiZBc511vyHinrT2d62_cwN6B5AxlhwI-IXvKp2EEQzDp042LdJzmSxw0ooPBYwTv2NWdthZELbfW6PjgDBltzT8Yzl55MtGQqCUjIyKYIxME5OC0A82b4Ogz7Wu3cJOcc8hquUswsvFFLT8lY8m4dzvmLDog5WhY90yjY0wTxh9VOAbn3R3n-bH5f_WD6bT9HWOyBJn7C2m6lVPNi3OyCqcR9PM3HymgnkCo2kdumc67SG8bRyeeIASi3OWd7LivPrMWR-N6oRr-uWCp-DjrvxN-9rke7_nPHHkknOneY8RMeNl2NR0EpBQcHLWxKeAF8EJqiHsmIvupuE6AnM0b4QtFTF2HMd5QiPXuA8s-CLWewHmCgNmqMfHA4zln8QktFyumefbxPG5H7XqLuaC5fuoeDokgeh5u7PA4-mT74q3Got-UfVu2eoGbZb1uZNmWy9Vi3MgaZVtWSjWHujlW9XF56KtjLUuly7JZLRdmo6QqZSmrZSOX1ao4rg_rtpeIct3Uq6USK4mTNraw9mkqfBgWJsaEm3q5bMuF1Qe0Md8oSk3WcHN0ng9Z8RUTNrzr7pCGKFbSmkjxlYcM2XwZ8b43jSiq3fu3BvQeoxNqTddDermOOh8CdmRPixTsZiSa89RXe6H2g6ExHYrOT0LtWf3ydTcH_xd2JNQ-pxSF2ues_g0AAP__0R89UQ">