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

    <tr>
        <th>Summary</th>
        <td>
            mlir compilation failure in `zip_equal` on arm32
        </td>
    </tr>

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

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

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

<pre>
    Trying to build `llvm 16.0.0` for arm32 and asserts enabled fails with:
```
In file included from /usr/include/c++/12.2.0/cassert:44,
                 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/include/llvm/ADT/STLExtras.h:29,
 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/include/mlir/Support/TypeID.h:20,
 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/include/mlir/IR/MLIRContext.h:13,
 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/include/mlir/IR/DialectRegistry.h:16,
 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/include/mlir/IR/Dialect.h:16,
 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/include/mlir/IR/OpDefinition.h:22,
 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/include/mlir/IR/Builders.h:12,
 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/include/mlir/IR/PatternMatch.h:12,
 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/include/mlir/Conversion/VectorToSCF/VectorToSCF.h:12,
 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h:14,
 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/include/mlir/Dialect/Linalg/Passes.h:16,
 from /home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/lib/Dialect/Linalg/Transforms/DataLayoutPropagation.cpp:9: 
/home/users/builder/rpm/BUILD/llvm-16.0.0.src/include/llvm/ADT/STLExtras.h: In instantiation of 'llvm::detail::zippy<llvm::detail::zip_first, T, U, Args ...> llvm::zip_equal(T&&, U&&, Args&& ...) [with T = iota_range<long long int>; U = ArrayRef<long long int>&; Args = {SmallVector<mlir::OpFoldResult, 13>}]':
/home/users/builder/rpm/BUILD/llvm-16.0.0.src/tools/mlir/lib/Dialect/Linalg/Transforms/DataLayoutPropagation.cpp:58:23: required from here
/home/users/builder/rpm/BUILD/llvm-16.0.0.src/include/llvm/ADT/STLExtras.h:894:19: error: no matching function for call to 'all_equal(<brace-enclosed initializer list>)'
  894 | assert(all_equal({std::distance(adl_begin(t), adl_end(t)),
      | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  895 | std::distance(adl_begin(u), adl_end(u)),
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  896 | std::distance(adl_begin(args), adl_end(args))...}) &&
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
/home/users/builder/rpm/BUILD/llvm-16.0.0.src/include/llvm/ADT/STLExtras.h:1986:28: note: candidate: 'template<class T> bool llvm::all_equal(std::initializer_list<_Tp>)'
 1986 | template <typename T> bool all_equal(std::initializer_list<T> Values) {
      | ^~~~~~~~~
/home/users/builder/rpm/BUILD/llvm-16.0.0.src/include/llvm/ADT/STLExtras.h:1986:28: note:   template argument deduction/substitution failed:
/home/users/builder/rpm/BUILD/llvm-16.0.0.src/include/llvm/ADT/STLExtras.h:894:19: note:   deduced conflicting types for parameter '_Tp' ('long long int' and 'int')
  894 |   assert(all_equal({std::distance(adl_begin(t), adl_end(t)),
      | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  895 | std::distance(adl_begin(u), adl_end(u)),
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  896 | std::distance(adl_begin(args), adl_end(args))...}) &&
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```
That's because `zip_equal` assumes `difference_type` of all 3 input parameters are the same and passes them to `all_equal`:
https://github.com/llvm/llvm-project/blob/a6a788bdfb39cbf66e7196a39785d848ce714338/llvm/include/llvm/ADT/STLExtras.h#L939-L941

However on 32-bit platforms `difference_type` of first argument (`iota_range`) is `intmax_t` therefore `long long int` while for the other two it's `int`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWM1u27wSfRp6Q8SQSFk_Cy_8E-EGSNEicbsNKGlks6BIlaSauos--8VQTpykLere-9Xp4hMMJaTI4eHMmcORhHNyqwHmZLYks_VEDH5n7PxjL9TgJpVp9vON3Uu9pd7QapCqoSSNlPrc0TidRtOIpBFtjaXCdpxRoRsqnAPrHQUtKgUNbYVUjt5LvyN8QaI1iRYkjQ6_0LzStJUKqNS1GhqcYk1HCSsHZwkrD92ElTVhy_ArYzZl0wi7xuUIXyQJYavRIH15PRjcmQ6CXbCOsDJsCHAN23eElcv3V9drwkrc38W4v6mz9TMM-IywcrHeEFbebq4vv3gr3BQ3x4ojgv97RW-Mwhmdks-dcOi4HfreWE9Yudn3cLUeEURnRHB1Q1j55vrqZmW0hy8-IIj5uRGspVBQ-xvYSuftfkSRvhKKV1r9bb-GVmrppdEjEdi5ISxHc2MmxGdf_p3wHqx-I3y9Oz-EldGfwTppNGHlB6i9sRtzuyqft86P68BKwsprqYXaolpYoV1rbOeeNUZsyetie4di7v54DilZneCbtfDiWuzN4N9Z04utCMlV9z3hi4LwBT2cZX_6VKFXmkrtvNBeBgzUtJSwLEzhC8IXDXgh1fj_V9n3e8JXP31610rrPGErusHbe7wt7NbR6XRK-CU9TsTB8GkQirB8Q1gafmHGw784b2yF2aygZLbEk55uKOFrKo0Xd1boLSAio7c03KT2hF8SvqTvw7CFtWJ_A-2PBrEUxwWAOJRky9tOKDVmFeGrENIA921fGtXcgBtU2F7McX62JrM1Ydmx9vibeDTLUas5RtnCp0Hah-JnBxbOxK-8SDDfAqXBWvTqgmpDO5RSrPzaQdeBd1jn1UIprAUJy4RSj_wgfFVZUcMF6FoZBw0Np5FQ8itYqqQbg1lgJA4lWl4klGSrQ71IWP7MXrZ0vjkQWCL5a8AhjbqrYCs1YbkP5lYU-0A3jz3FizIQ1_j2cJHZ5bdTryPQWTDyK0DDd4CGXwM6GUN6EgYRMvIFjMfOArM0W4dEHZP4f4R1vM6lgnGRp5gr-chOD_i3FrqRjRgbhGUeul6F5qpWwjm6QUWrjFFPZO0pzR7d-YStdyNbV3eb_iVnEUTw08NClPCV3_egRQdPFjt1iTDjg1ADuBCTbPkyIE_4-pqOpscdC7sdOtCeNtAMQRcIK91QOS_9MMqEkAqaf0Rwf1vAjoADPGhobXSrZO3DO-y-BxdkrBdWdODBIm0w0iyjKDsse34CsSy80xKWjS2kwwv9ov8q2GkY_lIF--Enic1OYLgdraAWgwNK0uhYD6URxnzowGF_I9sWLOga7pBg-NS0qAGUU6n7wR_Z5qiwQP0OqEPFQGr1oebFvi6cq2l0ZFEaPWbRzvveYYvhS8VW-t1QTWvTHVMjZE9vzcexGKmUwepEpCLL86ppK17UVZumkMVFKniR5bMmT_IasjjhPD_aOSHnGL8ueHFxXSTxwXvh_h9zD5_BUqMpZxeV9BQlI9RBP_dTKEePqoKZk0ZPCsc0wmDLYEFq34kvdx6neiyRWmNDaJ4nbRrR-51UEDIdnW1wMPX3hsoxqqMtkkbTSTPnTcELMYF5nGZFEiVxxie7eZuxNM3ErMqbVmQNi0XcpklU87QSdRXNJnLOIsYjzuKYRwXnUyayuhWJKJK84VGdkSSCTkg1RT9Ojd1OpHMDzNN4lscTJSpQLnx3Y0zDPQ0PCWNktp7YeYhmNWwdSSI8LdzRipdewRxrUFqbrpdKPMruYIFK_R1ZjR6_z00Gq-a_zaQADHU7AP9vAAAA___cxFyj">