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

    <tr>
        <th>Summary</th>
        <td>
            [mlir] Convert-spirv-to-llvm Pass trigger Segmentation fault in LLVMStructType verifier
        </td>
    </tr>

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

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

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

<pre>
    
MLIR built at commit https://github.com/llvm/llvm-project/commit/a0138390
Reproduced with: 
`mlir-opt --convert-spirv-to-llvm temp.mlir`

temp.mlir:
``` 
module { 
  spirv.module Logical GLSL450 {
    spirv.GlobalVariable @var01_scalar bind(0, 1) {aliased} : !spirv.ptr<!spirv.struct<(!spirv.rtarray<f32, stride=4> [0])>, StorageBuffer>
    spirv.GlobalVariable @var01_vec2 bind(0, 1) {aliased} : !spirv.ptr<!spirv.struct<(!spirv.rtarray<vector<2xf32>, stride=8> [0])>, StorageBuffer>
    spirv.GlobalVariable @var01_vec4 bind(0, 1) {aliased} : !spirv.ptr<!spirv.struct<(!spirv.rtarray<vector<4xf32>, stride=16> [0])>, StorageBuffer>
  
    spirv.func @load_different_vector_sizes(%i0: i32) -> vector<4xf32> "None" {
      %c0 = spirv.Constant 0 : i32
  
 %addr0 = spirv.mlir.addressof @var01_vec4 : !spirv.ptr<!spirv.struct<(!spirv.rtarray<vector<4xf32>, stride=16> [0])>, StorageBuffer>
      %ac0 = spirv.AccessChain %addr0[%c0, %i0] : !spirv.ptr<!spirv.struct<(!spirv.rtarray<vector<4xf32>, stride=16> [0])>, StorageBuffer>, i32, i32
      %vec4val = spirv.Load "StorageBuffer" %ac0 : vector<4xf32>
  
      %addr1 = spirv.mlir.addressof @var01_scalar : !spirv.ptr<!spirv.struct<(!spirv.rtarray<f32, stride=4> [0])>, StorageBuffer>
      %ac1 = spirv.AccessChain %addr1[%c0, %i0] : !spirv.ptr<!spirv.struct<(!spirv.rtarray<f32, stride=4> [0])>, StorageBuffer>, i32, i32
      %scalarval = spirv.Load "StorageBuffer" %ac1 : f32
  
      %val = spirv.CompositeInsert %scalarval, %vec4val[0 : i32] : f32 into vector<4xf32>
      spirv.ReturnValue %val : vector<4xf32>
    }
  }
  
  
}
```
 
trace:
```console  
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 --convert-spirv-to-llvm 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 0x00000001023fc5bc llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  mlir-opt                 0x00000001023fb624 llvm::sys::RunSignalHandlers() + 112
2  mlir-opt 0x00000001023fcc54 SignalHandler(int) + 344
3  libsystem_platform.dylib 0x00000001a56894c4 _sigtramp + 56
4  mlir-opt 0x0000000102a8a668 bool mlir::Type::isa<mlir::LLVM::LLVMVoidType, mlir::LLVM::LLVMLabelType, mlir::LLVM::LLVMMetadataType, mlir::LLVM::LLVMFunctionType, mlir::LLVM::LLVMTokenType, mlir::LLVM::LLVMScalableVectorType>() const + 24
5  mlir-opt 0x0000000102a8a668 bool mlir::Type::isa<mlir::LLVM::LLVMVoidType, mlir::LLVM::LLVMLabelType, mlir::LLVM::LLVMMetadataType, mlir::LLVM::LLVMFunctionType, mlir::LLVM::LLVMTokenType, mlir::LLVM::LLVMScalableVectorType>() const + 24
6  mlir-opt 0x0000000102a8bef8 mlir::LLVM::LLVMStructType::verify(llvm::function_ref<mlir::InFlightDiagnostic ()>, llvm::ArrayRef<mlir::Type>, bool) + 76
7  mlir-opt 0x0000000102a8bcc8 mlir::LLVM::LLVMStructType mlir::detail::StorageUserBase<mlir::LLVM::LLVMStructType, mlir::Type, mlir::LLVM::detail::LLVMStructTypeStorage, mlir::detail::TypeUniquer, mlir::DataLayoutTypeInterface::Trait, mlir::SubElementTypeInterface::Trait, mlir::TypeTrait::IsMutable>::get<llvm::ArrayRef<mlir::Type>, bool>(mlir::MLIRContext*, llvm::ArrayRef<mlir::Type>, bool) + 76
8 mlir-opt                 0x000000010332d334 std::__1::__function::__func<std::__1::enable_if<std::is_invocable_v<mlir::populateSPIRVToLLVMTypeConversion(mlir::LLVMTypeConverter&)::$_5, mlir::spirv::StructType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>>, std::__1::function<std::__1::optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::spirv::StructType, std::__1::enable_if<std::is_invocable_v<mlir::populateSPIRVToLLVMTypeConversion(mlir::LLVMTypeConverter&)::$_5, mlir::spirv::StructType>, std::__1::function<std::__1::optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::spirv::StructType, mlir::populateSPIRVToLLVMTypeConversion(mlir::LLVMTypeConverter&)::$_5>(mlir::populateSPIRVToLLVMTypeConversion(mlir::LLVMTypeConverter&)::$_5&&)::'lambda'(mlir::spirv::StructType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>(mlir::populateSPIRVToLLVMTypeConversion(mlir::LLVMTypeConverter&)::$_5&&)::'lambda'(mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>), std::__1::allocator<std::__1::enable_if<std::is_invocable_v<mlir::populateSPIRVToLLVMTypeConversion(mlir::LLVMTypeConverter&)::$_5, mlir::spirv::StructType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>>, std::__1::function<std::__1::optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::spirv::StructType, std::__1::enable_if<std::is_invocable_v<mlir::populateSPIRVToLLVMTypeConversion(mlir::LLVMTypeConverter&)::$_5, mlir::spirv::StructType>, std::__1::function<std::__1::optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::spirv::StructType, mlir::populateSPIRVToLLVMTypeConversion(mlir::LLVMTypeConverter&)::$_5>(mlir::populateSPIRVToLLVMTypeConversion(mlir::LLVMTypeConverter&)::$_5&&)::'lambda'(mlir::spirv::StructType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>(mlir::populateSPIRVToLLVMTypeConversion(mlir::LLVMTypeConverter&)::$_5&&)::'lambda'(mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>, std::__1::optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>::operator()(mlir::Type&&, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>&&) + 776
9 mlir-opt                 0x000000010363a9e4 mlir::TypeConverter::convertType(mlir::Type, llvm::SmallVectorImpl<mlir::Type>&) + 764
10 mlir-opt 0x000000010363f0f4 mlir::TypeConverter::convertType(mlir::Type) + 64
11 mlir-opt                 0x0000000103346d14 (anonymous namespace)::GlobalVariablePattern::matchAndRewrite(mlir::spirv::GlobalVariableOp, mlir::spirv::GlobalVariableOpAdaptor, mlir::ConversionPatternRewriter&) const + 124
12 mlir-opt                 0x0000000102f78af4 mlir::OpConversionPattern<mlir::spirv::GlobalVariableOp>::matchAndRewrite(mlir::Operation*, llvm::ArrayRef<mlir::Value>, mlir::ConversionPatternRewriter&) const + 144
13 mlir-opt                 0x000000010363ee34 mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const + 200
14 mlir-opt 0x000000010389bbd0 mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<mlir::LogicalResult (mlir::Pattern const&)>) + 1440
15 mlir-opt                 0x00000001036494b0 (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) + 1948
16 mlir-opt 0x0000000103642b1c (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>, llvm::function_ref<void (mlir::Diagnostic&)>) + 928
17 mlir-opt 0x0000000103644d18 mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>*) + 80
18 mlir-opt                 0x000000010334dc20 (anonymous namespace)::ConvertSPIRVToLLVMPass::runOnOperation() + 600
19 mlir-opt 0x00000001036074dc mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) + 420
20 mlir-opt 0x0000000103607a0c mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) + 320
21 mlir-opt                 0x0000000103609388 mlir::PassManager::run(mlir::Operation*) + 1148
22 mlir-opt 0x0000000103602840 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
23 mlir-opt                 0x0000000103602410 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
24 mlir-opt                 0x000000010366d02c 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
25 mlir-opt 0x0000000103600838 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
26 mlir-opt                 0x0000000103600d2c mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) + 1208
27 mlir-opt 0x000000010229f0a0 main + 108
28 dyld 0x0000000106ad5088 start + 516

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW1tP67j2_zThxQIlzqXJAw-lwAxS-YMog_Q_L9VK4rQ-49g5ttM9nU9_ZCdpk16g7M3MsI9AW7slXllev3X3BVCKLjghl0545YTXZ1DrpZCXE8GYqITUtXLPUpGvLx332nHH99O7J5TWlGkEGmWiLKlGS60r5fhjB986-HZB9bJOLzJROviWsVX3cV5J8W-SaQffNu85-BZcz4_9xG2YP5FKirzOSI6-Ub10_DFqBpzILRmV56LS6Pw8E3xFpD5XFZWrcy3ODXekSVldGConatk1_2-f--MNt-Zfy70Uec0IckZX7QOELOuLdmAqFjQDhn6ZzqZB6BrCjq6j_IWJFNgLSAqpYRW4K5CuN1cZMJAopTx3cOw6eII8ByeGBTAKiuTO6BpZoNhrWFVaOv5k86vSss60fRJvHkoNUsLa8SeFjw1TpSXNieNfB45_g5zwynXCawcnjn9jhmdaSFiQq7ooiDTPThR_RTL8Fwq_IpkW5gX8h8HRyLqBEn80lODvgBIcguJF78Kyi6moeWaQMAH5PKeGmnA9b-acK_onUVaqkLoGAjU-kaBzM-eeXMjB-P8EJw7GQ0dGyMFh5iLHv26nnQiuNHCNXNSxHQro4BDyXPbfMYF2YR4SpUSxo_7Pot8WLAzQjrOMKDVZAuUbYCYnGqUYZo16w0_gJXjSmHjSN0mLyeh5BayHayogN0YfsjHW7zQw3veSfU9EnVK8E6zdpr1_MK-1BvZeN7D30Qb-TrFfs2ijy_fY1LMIir1w3fjIgNdElJVQVJM7rojUgylbtbROZXBsMkGrp8LHiHItjrvQNo09EV1L_gKsJlsxXnE-hJzR9QZD7-vgczOwKetddmrKv4SM7Jf-THAlGOmYPE5vxrMbpOrU9DOA0nqBJDH9D9Li_f0NVao2OfkWAc8R5Rmrc4L0kqBMglqiFLLfrWAXzfQzDdnvKK_LaiOpe-G4yaMUCwklArmoS8K1EQK9oxPaYW67KlFrpNZlKhjiUBKFHBwTrmpJ0FrUaAkrgiychoj-SSSi3IxJ9Dh-_hUJiRTRFg3hKyoFN6KhlQn4yJ1OX-7ns_-_v3qY3v3r5mluXjGtlhaoEpRbfZrWL9kiRVtI7h9u8-O52C-yMM2sLIbWH6u1ar48Ssq1hfVsrYvjLZGEb3OhtCRQOjiyIcW1LfX4CoVRM6XXm3L3ZyhCGuHgkAhPNZ_RBQf2K_CcEdkU4GYWz2sjDx9HloUBGjBwcNwT1A-ChoWPEKOpWitNynnFQBdClhf5mtG0xxLCKE6CLEBzRRdaQlkN4AZH5IAYoihGqRAMdR2yP35eV6T5RhU4_mQ7Ymy7_fYiaG5p8QQdo5lCSthbRPdEQw4a3qK7rXmmqeBv0T2L38mbRDOT41JGXmz2aTDftEY0yUFbDeLWDOGXBn9Qg9FRDaakiI9PYuvtVqErImmxHkR80YKaS1IMlH3HbxldLPU1hQUXStMMNeK1JXfLYmzK99PO6xtEE2vfLjRHbVCNjgPKslMA9UhyooGy5ntb039TRF6BIq-4T083AzO9Zrj-TEMe7bzDF_vkhug3Tv9Tm2TVJ7oGDVNYi9ryueOayKItuv74WYJJ9336WZ3eMGKKxmn0hqp53JhV3dfaOJ4xjn2yIKYje6c5ra9uh--nd08TwTX5Qzt4_OPuEZ9UYXwf574fIKXzhut87nVfOr_u_-74k31Swo025rToj1I1p3wlMju0GkheiapmoMns8e7p5VnYgF9XZGKbCWVm7CtmOKyN8aO2fJuOKJiHQ2vZXqRz5b6DbvU5K4GxJm3clRU7rNboHTboFlK7mtmq8IDaRGWGYDh9u9fzRFTNdLNcjvcj6y-E0mSnzrP1ME8M7WAffZNQTYAx01IOGB61w8_pQF8mfoeJ_0JT7aTNj3eFaPhsxKBMc3DwaMDpn8gybePwCdD_PWAPxhswJjJoFuw_Zyb5KkWfJk_9nA70ZeKvUvRViv5uJz0Ycp86qhoBibTVstl42Bck2mP98eK0lmzWp90CNTltgRr5kJDg9azQbkM3gD5E1d1aut088tyDey1-5Bdu8UPCNRNt5vFOXLUHUe4Fxq-AC74uRa2azfTKbke3MTM8in4ErYlsV_Ml6Gw55vkT-SapJsfyyZDDQ3W0Ou0SjnOorNf16be5oJWlnb0N_t6mndft2nn4tI3yYhTDwBAP1d5sx-rFHsgudl5T0oONK5vWTtmssYdObRb5LoV0-_Gef2rYEOIHr831fozbkbfExW57COYFhwMnTtI0d_c5jquK0ba9_1jx-iba2bG1u-cD1i2DBlFXhm5eZbISNP9hJkdqyGl8k85TOt2HJ7pKkASp-1Yy2Wh7ShZgT-Wa56z99UTTvOXyFkISxC2E6EjeDXDqZSeLfDgjb4bVYDv_YPwOAL3bE7YHAHvmSnAHdXQMapB7_e18qCq2fgSpKbAj3dUp6n8GuSC6DY0twa0Uf5LOKK2JZkT3nK2P_JpwRWZ29_uU1GjJ76G644V49RWjwm4xO-5UFXd-ferWdpBn-E2_bn2j17Y-gmoPWWXNH3hPts0Ja7TJb8kRq7mjIM-OHGQ8VM_ioTLTdGWym20nzpXaM-Bx0445sLWi6h44LJojkuZcYIJqbu9Y5v2j6AC3EPCx3sYdgft-CI-0Iozy3XxgSDeSRR-OaZj9lbrjSkt7ZcE0IXvloU8A2zOOTvZHkIRr46Wd32-c0N-o7cRWLXITP453Zu_wHLT7UB3dkX6XEjE-Zi4cBy6qiCyELMfZfmLbv5nQ6bL73F_fqCVIks-bS0i9NlrUMiP3C2lWN_3UUJ50nvV9VW_oQMng7Gt4Bha6bbeET-2WXBx4_XZkKMj3SL6vy9qeXe7p8p6UQq67K1SHjJCTAmqm5zlhRJPjL292_47bfLswzNpdlHkxbIzvGZUPlb4Hyt_wns-B8CN9aVCxGcn0E1lQpeX6SLyc9tnb1XCbXRMm-OLzaHDPR5q17yaGghNjKMpdnA2Wh4zqMc8fpciIUp30nyQy_ici-VWKw7kx6i5l4fBYIXFjv1-wvjLCh2eEZpHsdZaITq1Sbj6IsKFl2kYoW0LT8uwU3ZmWlC_MwuZkXG3vgd2u9zi8RsE4KVxwUdncbL5C3uaFGOVrlveJI8hDN46R0iCbzYKw08POFdmz_NLPEz-BM3LpRSM_TLwgxmfLS9_PPMC554VJMQoCL8J-kXoJwWkYkRHAGb3ELvZdz_PdyPcwvnBxkQOJAfIkivKYOIFLSqDswqjnQsjFmb0xexkmSeKeMUgJU_YPkjDm5Buygw7GTnh9Ji_t5dS0XigncBlVWm25aKqZ_Usmq9_wGk0OXpA13oa0pIsFkWhGFps2FFmnR5Sjnata9toZJfKsluzy-68DW3z_DQAA__9HdCF5">