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

    <tr>
        <th>Summary</th>
        <td>
            [mlir]Test-Elements-Attr-Interface triggered Assertion failure "cast<Ty>() argument of incompatible type"
        </td>
    </tr>

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

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

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

<pre>
    MLIR built at commit https://github.com/llvm/llvm-project/commit/034bab4c
Reproduced with:
```shell
mlir-opt --test-elements-attr-interface temp.mlir
```

`temp.mlir`:
```milr
module {  // RUN: mlir-opt %s --convert-memref-to-llvm | \
  module attributes {llvm.data_layout = ""} {
    memref.global "private" constant @"__constant_32xcomplex<f32>_0" : memref<32xcomplex<f32>> =
 sparse<[[1], [28], [31]],
              [(1.000000e+00,0.000000e+00), (2.000000e+00,0.000000e+00), (3.000000e+00,0.000000e+00)]
            > {alignment = 128 : i64}
  }
}
```
 
trace:
```console
Pass Manager with 11 passes:
builtin.module(convert-gpu-launch-to-vulkan-launch,scf-for-to-while,strip-debuginfo,test-print-defuse,func.func(test-vector-transfer-unrolling-patterns{reverse-unroll-order=false}),test-elements-attr-interface,spirv.module(spirv-webgpu-prepare),test-dynamic-pipeline{dynamic-pipeline= run-on-nested-operations=false run-on-parent=false},test-print-nesting,func.func(test-spirv-target-env),func.func(affine-loop-unroll{cleanup-unroll=false unroll-factor=4 unroll-full=false unroll-full-threshold=1 unroll-num-reps=1 unroll-up-to-factor=false}))

// -----// IR Dump Before ConvertGpuLaunchFuncToVulkanLaunchFunc (convert-gpu-launch-to-vulkan-launch) //----- //
module {
  module attributes {llvm.data_layout = ""} {
 memref.global "private" constant @"__constant_32xcomplex<f32>_0" : memref<32xcomplex<f32>> = sparse<[[1], [28], [31]], [(1.000000e+00,0.000000e+00), (2.000000e+00,0.000000e+00), (3.000000e+00,0.000000e+00)]> {alignment = 128 : i64}
    llvm.func @entry() {
      %0 = memref.get_global @"__constant_32xcomplex<f32>_0" : memref<32xcomplex<f32>>
      llvm.return
    }
 }
}


// -----// IR Dump Before SCFForToWhileLoop (scf-for-to-while) //----- //
module {
  module attributes {llvm.data_layout = ""} {
    memref.global "private" constant @"__constant_32xcomplex<f32>_0" : memref<32xcomplex<f32>> = sparse<[[1], [28], [31]], [(1.000000e+00,0.000000e+00), (2.000000e+00,0.000000e+00), (3.000000e+00,0.000000e+00)]> {alignment = 128 : i64}
    llvm.func @entry() {
      %0 = memref.get_global @"__constant_32xcomplex<f32>_0" : memref<32xcomplex<f32>>
      llvm.return
    }
 }
}


// -----// IR Dump Before StripDebugInfo (strip-debuginfo) //----- //
module {
  module attributes {llvm.data_layout = ""} {
 memref.global "private" constant @"__constant_32xcomplex<f32>_0" : memref<32xcomplex<f32>> = sparse<[[1], [28], [31]], [(1.000000e+00,0.000000e+00), (2.000000e+00,0.000000e+00), (3.000000e+00,0.000000e+00)]> {alignment = 128 : i64}
    llvm.func @entry() {
      llvm.return
    }
  }
}


// -----// IR Dump Before (anonymous namespace)::TestPrintDefUsePass (test-print-defuse) //----- //
module {
  module attributes {llvm.data_layout = ""} {
 memref.global "private" constant @"__constant_32xcomplex<f32>_0" : memref<32xcomplex<f32>> = sparse<[[1], [28], [31]], [(1.000000e+00,0.000000e+00), (2.000000e+00,0.000000e+00), (3.000000e+00,0.000000e+00)]> {alignment = 128 : i64}
    llvm.func @entry() {
      llvm.return
    }
  }
}


// -----// IR Dump Before (anonymous namespace)::TestElementsAttrInterface (test-elements-attr-interface) //----- //
module {
  module attributes {llvm.data_layout = ""} {
    memref.global "private" constant @"__constant_32xcomplex<f32>_0" : memref<32xcomplex<f32>> = sparse<[[1], [28], [31]], [(1.000000e+00,0.000000e+00), (2.000000e+00,0.000000e+00), (3.000000e+00,0.000000e+00)]> {alignment = 128 : i64}
    llvm.func @entry() {
      llvm.return
    }
  }
}


<unknown>:0: error: Test iterating `int64_t`: unable to iterate type
<unknown>:0: note: see current operation: "memref.global"() {alignment = 128 : i64, constant, initial_value = sparse<[[1], [28], [31]], [(1.000000e+00,0.000000e+00), (2.000000e+00,0.000000e+00), (3.000000e+00,0.000000e+00)]> : tensor<32xcomplex<f32>>, sym_name = "__constant_32xcomplex<f32>_0", sym_visibility = "private", type = memref<32xcomplex<f32>>} : () -> ()
<unknown>:0: error: Test iterating `uint64_t`: unable to iterate type
<unknown>:0: note: see current operation: "memref.global"() {alignment = 128 : i64, constant, initial_value = sparse<[[1], [28], [31]], [(1.000000e+00,0.000000e+00), (2.000000e+00,0.000000e+00), (3.000000e+00,0.000000e+00)]> : tensor<32xcomplex<f32>>, sym_name = "__constant_32xcomplex<f32>_0", sym_visibility = "private", type = memref<32xcomplex<f32>>} : () -> ()
Assertion failed: (isa<To>(Val) && "cast<Ty>() argument of incompatible type!"), function cast, file Casting.h, line 567.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: mlir-opt --test-elements-attr-interface temp.mlir
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  mlir-opt 0x000000010436cd04 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  mlir-opt                 0x000000010436bd6c llvm::sys::RunSignalHandlers() + 112
2  mlir-opt 0x000000010436d39c SignalHandler(int) + 344
3  libsystem_platform.dylib 0x00000001a56894c4 _sigtramp + 56
4  libsystem_pthread.dylib 0x00000001a5671ee0 pthread_kill + 288
5  libsystem_c.dylib 0x00000001a55ac340 abort + 168
6  libsystem_c.dylib 0x00000001a55ab754 err + 0
7  mlir-opt                 0x0000000105cd3c20 llvm::APInt std::__1::__invoke_void_return_wrapper<llvm::APInt, false>::__call<mlir::FailureOr<llvm::mapped_iterator<llvm::detail::SafeIntIterator<long, false>, std::__1::function<llvm::APInt (long)>, decltype(std::declval<std::__1::function<llvm::APInt (long)>>()(*decltype(__declval<llvm::APInt>(0)) std::__1::declval<llvm::detail::SafeIntIterator<long, false>>()()))>> mlir::SparseElementsAttr::try_value_begin_impl<llvm::APInt>(mlir::detail::ElementsAttrTrait<mlir::SparseElementsAttr>::OverloadToken<llvm::APInt>) const::'lambda'(long)&, long>(mlir::FailureOr<llvm::mapped_iterator<llvm::detail::SafeIntIterator<long, false>, std::__1::function<llvm::APInt (long)>, decltype(std::declval<std::__1::function<llvm::APInt (long)>>()(*decltype(__declval<llvm::APInt>(0)) std::__1::declval<llvm::detail::SafeIntIterator<long, false>>()()))>> mlir::SparseElementsAttr::try_value_begin_impl<llvm::APInt>(mlir::detail::ElementsAttrTrait<mlir::SparseElementsAttr>::OverloadToken<llvm::APInt>) const::'lambda'(long)&, long&&) (.cold.1) + 0
8  mlir-opt 0x0000000105640b0c mlir::FailureOr<llvm::mapped_iterator<llvm::detail::SafeIntIterator<long, false>, std::__1::function<llvm::APInt (long)>, decltype(std::declval<std::__1::function<llvm::APInt (long)>>()(*decltype(__declval<llvm::APInt>(0)) std::__1::declval<llvm::detail::SafeIntIterator<long, false>>()()))>> mlir::SparseElementsAttr::try_value_begin_impl<llvm::APInt>(mlir::detail::ElementsAttrTrait<mlir::SparseElementsAttr>::OverloadToken<llvm::APInt>) const + 924
9  mlir-opt                 0x00000001056405dc mlir::FailureOr<mlir::detail::ElementsAttrIndexer> mlir::detail::ElementsAttrTrait<mlir::SparseElementsAttr>::buildValueResult<llvm::APInt>(std::__1::integral_constant<bool, false>) const + 48
10 mlir-opt                 0x000000010563fa9c mlir::detail::ElementsAttrInterfaceTraits::Model<mlir::SparseElementsAttr>::getValuesImpl(mlir::detail::ElementsAttrInterfaceTraits::Concept const*, mlir::Attribute, mlir::TypeID) + 152
11 mlir-opt 0x00000001055169bc std::__1::enable_if<std::is_same<mlir::Attribute, llvm::APInt>::value || !std::is_base_of<mlir::Attribute, llvm::APInt>::value, std::__1::optional<mlir::detail::ElementsAttrIterator<llvm::APInt>>>::type mlir::ElementsAttr::try_value_begin<llvm::APInt>() const + 52
12 mlir-opt 0x00000001055167bc std::__1::enable_if<std::is_same<mlir::Attribute, llvm::APInt>::value || !std::is_base_of<mlir::Attribute, llvm::APInt>::value, std::__1::optional<mlir::detail::ElementsAttrRange<mlir::detail::ElementsAttrIterator<llvm::APInt>>>>::type mlir::ElementsAttr::tryGetValues<llvm::APInt>() const + 36
13 mlir-opt 0x00000001055152a0 void llvm::function_ref<void (mlir::Operation*)>::callback_fn<(anonymous namespace)::TestElementsAttrInterface::runOnOperation()::'lambda'(mlir::Operation*)>(long, mlir::Operation*) + 2300
14 mlir-opt                 0x00000001056b7160 mlir::detail::walk(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) + 216
15 mlir-opt 0x00000001056b7160 mlir::detail::walk(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) + 216
16 mlir-opt                 0x00000001055148e4 (anonymous namespace)::TestElementsAttrInterface::runOnOperation() + 76
17 mlir-opt 0x0000000105593384 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) + 420
18 mlir-opt 0x00000001055938b4 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) + 320
19 mlir-opt                 0x0000000105595230 mlir::PassManager::run(mlir::Operation*) + 1148
20 mlir-opt 0x000000010558e6e8 performActions(llvm::raw_ostream&, bool, bool, std::__1::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) + 504
21 mlir-opt                 0x000000010558e2b8 mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0>(long, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) + 704
22 mlir-opt                 0x00000001055f9834 mlir::splitAndProcessBuffer(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) + 656
23 mlir-opt 0x000000010558c6e0 mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool) + 216
24 mlir-opt                 0x000000010558cbd4 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) + 1208
25 mlir-opt 0x000000010420f7a4 main + 108
26 dyld 0x0000000108d45088 start + 516
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW19T47iy_zTmRWXKlv_mgYeQDOdQBRcK2Nm698Ul2-1EF1nyleQwuZ_-lGQ7sSGZCbNTO7O7UBRxpFar__y61ZIFUYquOMCFE1060fKMtHot5MUCGChNOTzWVK_PclFuL25vrh9Q3lKmEdGoEHVNNVpr3SgnmDv4ysFXK6rXbX5eiNrBV4xthg-3keJ_odAOvurGOfjKC8Kc5GHheEvHmz9AI0XZFlCiF6rXhqNtd2Kv-1VrYKxrqxmVrmg0cl0NSrvAoAaulUu0li7lGmRFCkAa6ubcEL9i1X8dGvdksfd23pqyfnwtypYBcpJLhDp10cNv_-UEc7QTyMGRQq5bCL4Bqd0aagmVq4VrjICcZIGcaNFxQ6jnZ4SmeatBGdaG8LwkmmSMbEWrkRMskYOx-U2WhmIYjlDH_nzFRE6YIWok3RANDsaoEFxpwjVyQs_BOMuGhizAXwpRNwy-OMGiCrATfMoMCbKaWJZOsDhA5QSfjDT9_KohUoETLCxwLn0nWjrY6HeJ0_1zYNvt173c-x8zFqf-uWd_wMGXnufghfeqYWa54RSfShh8mzAaFEGON7OyGPWSS8Loihs4Wcv7OLV2oXHoJPsRw-P-YYot1H1oSQp4CynjCsGga70nSqFbwskKpIU-8n3UEKVA7UbaoKP8vEOMg9MBYKumdRlpebE2INu07JnwvsHBC1VUbiWk6XpZUzNwobSkjVtC3q4or4SDFzaCGkm5dkuoWmWoqpYX5-aPg1Pbv4FCG0aScFWBdFsuBWOUr9yGaA2SKye5lLABqaDvdIUsQTrBsiJMgTGU9c7XAtbI11C52etpv7ovkBtFGwkNkTDiU245qWnhNrQBRjk4yeWbpmCJZMtdwV0OSkPpigYk0VRwNQg3EBjuXE9EHpuH24y4OmSfTk5N5Aq0C3zTyTgmI1VFObhMiKY3kJNcFgwIb3cNgzi9AStijO4Ey3DX0h6gahlz9VqCWgtWOsHSH3p4W7sSTHbet7WNQcOO88Q3s0le7BKca3765-sHtGzrBl1CJSSgRYfBfzXtjQXcVcuLJ_HZYnDfgk5F66zPqXbG_vl13v0xmfPnpM33J8yfnB1PT4cIWdtX1t2hB1zLrYNT69PxemWWzcizjAYfgM4GP_xIg4_ntLJJ0K3k--a99Ady-bvC4HFxdSXkk_jdZNgbIRpj4beZ98-D908rDD4Q_jdFuKkZlqZkuOaVsPB-XUV8JO9_ALS_AbM_jDNTJXHBt7VoFeKkBtXYonBm6uBg_gRK35tCbAnVbwps3TzUX9P69QONH2j8M9D4qd_GzLWW17tThwGTRzc5H6XAB0JPQGiwaPkzFy_cmnXuGVFASrNvmyMDP0S13cnyFXJij3Idh5nuzrBQy0nOAGnREwHS2wa-wpkLDeZTAaCilWYjjHY7ZdPhYDzBksXboPZxw-HFDmbmmXKqKWHZhrAW_rJICeZIA1fGFcfKM7xAaltnJnEM4XlCfA3DNlTRnDKqt8PgfdgaGuPMUZV5XAyTDqzzrKdcK719_j6QtR8o-0DZu1E2Vwqk8TCqCGVQ9rRUESdYPAmrSPrZONssjbGDYyNLQZQ2_duu33QSuWqt_0WFKDeSEE0tAg3ssG_ltoY26dnOaLmYBsoALYg9wTtfmxZGOaAoTs77c9ibT_PHT0i1eU01IihvV0hCI6Q2-H73aw6qVAvK1BWEl0ZY1paA9BpQIYlao5wUz_Z4uJ_-UZPiGZVt3exOfb1zx5vdS7GSpN6pribvG973AmQ_hz1oNpWD2ta5YF19Y3wCXLUS0Fa0aE02YNcwtyOi_w8SUW76JLqfP_0bCYkUaKsU8A2VogvODZEmV9zcfL7NHv_79vLu5vp_Pj1kZogTe8aajaBcd2mjL6g6hdFeM-9LFxWe74VBXJReaGXpii-1Vd2D3Q9YtZ7sUTtO90SSvGRCaQmktqAyaUF3ELtEUdxN6Y-mfP0zFSEv4-KQCA8tf6QrTti_CS8ZSDXkK3yJfB930-CjmpXBrEATBiYy9oIGYdixCBBiNFdbpaHOGkZ0JWR9Xm4ZzUcsSRSns7AIUaboSktSNxN1wwkTvZZAykM8Eh_AQz1B9kwZs2xwmnZ8ojGf4gCHiBRB6CGSm_ixpoj7ofG3h-ZJFJpVyA7s36gkpzkqKsqgwN7IUfP7a66R0mX3Ncv84YHyjXiGbCNomXVlWvYiSdOASbivGNgUYg_L7WJmxxeEMSdY2PiyTVeEslbC3XR8bViWWbdCimlfCZpQ1j0_kgquub4e0Qn7tmE_scnbbxQZUt1boU1Adzxm_egSCtblynTHyLRtiNHkD_AeUrT9Ox9Nk2V7_q9tagd1S-PsgGKHBr7TYBOxZv1vt0vZu-3R1gbjzVzXruW2qyCyHFaUZ7Rujmqx5zaWcMzzSRKqJ3A5NG8PrrsNSCZI-SSe4YDx7ZyzruTpmh2cMFLnJXFwMvJMl_fst1difmD1A6u_LFZtDditgOl5IVh57g_rYb8cpIcX1CgOvdwr0AfOP3D-E3FukTrDfeU2O7F0iUMvKo9h99vKXPMSvpjaZWzHH6J53lJWfjZWfwDVMn3M4G_hYrYiK0nYbk_qBItcCDaNoLHVwr5M9L0TjRZUZFacoPHugNaq3hfvt6IEdqoZVqCtEdS1Ad0p-Do450LwAhrdZ0Q8N7bYs5oPJ73T5qdtA9fL3b4i6vcVvn84DUZ-PMuLA_EL9sQmo9U4tVCVKVLDxA4TOQ54237rz1eShb3Zhv0xx5woyET1nUwPp1XRmMRH2GnxcCi576f6tJvQHnPs-X0z6RyD_xTIOxfhoy5K_ukueiB8BT_Ome_w57-GWD7NmcFwXBAcc2aEiYfMVnJktGGlzrrDM9s7yRt3u6NPkwZmOw3MzjInxXNWGbB975uorlu2_I6PJkp3A1_VYV8VaygsxjnpFVl3QhB4fYXmhycm8DzxY-9IAn8h7Pkroi3-oLEn6vxO2POdvbM46OIPXo-OFJt_AdHj07wQ-WEK4Xe_9DwONStOMkiTHAmfWRCk4RFD3jVP4q65J0rNS9LYHNBPNrGRIXizmr62-SjPccK2iqr-5q3pHAqTltsr8eX4vDDEA6zToyqk-ftVuB-uqU7dbUh3ksU_XKfxIDPVNVda2uNlId9wnRIMb2pMRy_7vb02a-8G7Wua_vRyZ7bZiTicRTjwXs0-6HPQ74eykO8PZST2jrgrhRhS1ICshKznRXcf-OvHx4Mth8-3i59aEwll1ujpOvUoWlnA7crW5r2JXjn19ub6YSG4hi_6W-lhP-hGrGhBWFeUozfRMAbQkDOmOvRn4V6_UcH-iU5KAecpOibI90j-1pYtp__Xwhtb3kIt5PayraoO4Ie2qBVpmc5KYKDh-ODdG7TjPj-2Io_8xqi8a_Qtofwb6Pk1NPyRWNpTLClhUOgHWFFlr0McjJfTPnfFSZh508rj17DgG4x0K9wuhvCJMVTN0mC8XqiGUT3n5b0UBSg1SP-LRMbfIpK_SnE4N8bDmzN8rPJPixjGC9ZHRvjhGWFa0uITNxZRWuRleNQzfSFUrElX8rxadB-1pHz1ANXpevW1B_aG2uPwtiHEXpWQENWE8m7EbkCMyi0rx8RpGUZemiKlSf8iNRrssPt3srPyIihnwYycwYUfJ1GSRDiYna0viqRMZh6pcp9UeRnM8jwuIwgjKBI_mJH4jF5gDwce9hI_8BJ_dh4EEUmiIsjDMk68PHZCD2pC2bm9yybk6szea7iIvSj1zxjJgSn7n6MYc3hBttPB2ImWZ_LC3h3I25VyQo9RpdWei6aa2X85tZaNlmZj4Q47C9dsLdz9hUot6WoFEko0vUjS2lua33FPBJ-1kl18_5UOq_1_AgAA___0g1Id">