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

    <tr>
        <th>Summary</th>
        <td>
            MLIR Mesh dialect badly broke MLIR and Flang on Solaris
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir:core,
            mlir
      </td>
    </tr>

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

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

<pre>
    Between 20231006 and 20231016, 1800+ test failures appeared on Solaris (both amd64 and sparcv9) in the MLIR and Flang testsuites.  The failure mode is always the same:
```
FAIL: Flang :: Driver/bbc-openmp-version-macro.f90 (21590 of 79241)

expected:

{{.*}} = arith.constant 199911 : i32

found:

%c199911_i32 = arith.constant32199911 : i32
```
i.e. where a `' '` is expected, and integer (`32`) is printed.

A reghunt identified this patch
```
commit 08545e85167a105b8147d76a48a2fa1eac0f9e9a
Author: Chengji Yao <yaochengji@hotmail.com>
Date:   Tue Oct 10 11:35:40 2023 -0700

 [MLIR] Add a new Mesh dialect (#68007)
```
as the culprit.  Clearly this snippet makes unwarranted assumptions and causes the breakage:
```
diff --git a/mlir/include/mlir/IR/OpImplementation.h b/mlir/include/mlir/IR/OpIm
plementation.h
--- a/mlir/include/mlir/IR/OpImplementation.h
+++ b/mlir/include/mlir/IR/OpImplementation.h
@@ -366,6 +367,17 @@ operator<<(AsmPrinterT &p, bool value) {
   return p << (value ? StringRef("true") : "false");
 }
 
+/// Specialization for 8-bit integers to ensure values are printed as integers
+// and not characters.
+template <
+    typename AsmPrinterT, typename T,
+ std::enable_if_t<llvm::is_one_of<T, int8_t, uint8_t>::value, T> * = nullptr>
+inline std::enable_if_t<std::is_base_of<AsmPrinter, AsmPrinterT>::value,
+                        AsmPrinterT &>
+operator<<(AsmPrinterT &p, T value) {
+  return p << static_cast<int16_t>(value);
+}
```
However, `char` is `signed` on Solaris, so every character is printed as integer!

For some reason, I'm not able to assign this Issue to the author, so I'm trying this here: @yaochengji 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVltv2zoS_jX0y8AGRdq6PPjBlxob4Bx00eZln4yRNLLYSqRAUsl6f_2ClBw7aQoUJxAccTR3fnNB59RFE23ZZs82xwWOvjV2a4317aI09XW7J_9KpEFwIRPOU0Bdz4ckZeIASc45E3vw5Dw0qLrRkgMcBkJLNRgN302HVjlgIi-NbwH7Ol1HPW5AW70UTBSgNPiW4O-_nr7FT6cO9SUqdaPy5FYAzy3dDEBvagLlALtXvLoo6rAnJneMHxnfsZTPTzyedk9_MbmbtQYuuYOjVS9kmTiVZbU0A-l-WL6QdcroZY-VNaum4MFrkWwKDqaBrBDrhIlithF_6b8DVZ7qu-npN9uzbL9iYseyI8uOwOQR0CrfriqjnUftISmKIkmCO6CkeJRuzKh_0Sg21SRxVlJ8ok-KTxW-z4Ra0QpeW7IECIEqMmAiYykP6XwLRhziLSjt6UI2JIGlXIooUATOwYZv9erRwx1YurSj9qBq0l41imrwbeBGX7Wf-lOZvlceeL5ZbyjfJGmGCd-UebLO6izFdY6iwYSw4k1BBc6GIkxDmIeW9OWHgv-gASYPVzTVRGFr3hrfo-pWlemZ_DJJHtEHkADA80jwtfKQcEgSJndyw-RuzSO2Yckzzh9DA7bZB2yyzRF2dQ0Iml7hb3It1Ao7qnzMkZBpznl2h8j7YHFCajV2g1V-BXDoCG13nZLktBoG8tDjT3Iw6le0FkOSAZ0b-8Ero128lgpHR5Ou0hL-xMtvkV-rpoHl8qI8IBOnvlMB8UpX3VjTnfD0jYnT1-GpHzrqSXsMxlYtlH8iM1l6LznRlsvlPzF7A_x-ev7Mi09VrDlbc1jKNPSqFJjYyzRj4pBkMH8zA1n0AU2H8Ih85_p_R3DbZ2AiHUItlMZ08ILdSAH-obYnVABY8qPVMMAkH1AQ-YDJE3z3VunLN2oiNoS3QV5EFXIHTIgGOzeTmLwpDQ1jfrvn4TQ98H2gSmGn_hfjhMZYyJel8rdSdeANkHahSUZHHKClW7kCujfGD8ojsLTxULVosfJk3eqNxVM_dOgpRnkjAgD460Aae4KHrIWEvdHD6S7hfD01X9JYdnRWzdkzeei6l36iK3c2ms6mYfIQFSnt87MPb-P8Kr9MrPN1HOCZyS_AxC62RD123eDtW8EzsVe6U5p-Z_uNrNy5RDfbvocTLDwG99H8u3R89vcBT4-e_RH2nj8BXjT3EXouYL86V-hCXEr7JJ3SNUPyEWTh2m8w-9Ax_mVe6WWKm6U8oGEeDizlcVuow_k-1wOjMxBkrnfwPMyIB9AxkTx21ZOx4ExPYAmd0UHTExNZH3EYLimAedpRphb55NwYiaH1TcvKbH6S8_aqwtoQeMOMi2W25vexAIt6K-tCFrigbZIW2Uaui02-aLdcoCxp0xR52jQiT-uiyJuiaOqyrpuaxEJt57Un44UoknyVpjKtscw2qcREFCVbc4oDJ8B5ZexloYK727SQCV90WFLn4qIlROxdclcZO1X_4UYTIqxhdhtULMvx4tiad8p5d1fqle9oGxeld_OnxLq7QmnNz1_WqPtlLUbbbVvvBxdQHAv_onw7lnFKilOsxOnfcrDmB1U-NN0Qh2PiFEP5fwAAAP__DzYI_w">