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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR]crashed on '-decorate-spirv-composite-type-layout' with error message 'unhandled SPIR-V type'
        </td>
    </tr>

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

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

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

<pre>
    Test on [LLVM 16](https://github.com/llvm/llvm-project/tree/release/16.x)

steps to reproduce:
```
mlir-opt -decorate-spirv-composite-type-layout test.mlir
```
test case:
```
spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> {
  spirv.GlobalVariable @recursive_simple : !spirv.ptr<!spirv.struct<rec, (!spirv.ptr<!spirv.struct<rec>, StorageBuffer>)>, StorageBuffer>
}
```
crash trace:
```
unhandled SPIR-V type
UNREACHABLE executed at /home/ty/llvm16/mlir/lib/Dialect/SPIRV/Utils/LayoutUtils.cpp:98!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /home/ty/llvm16/llvm/mlir/build/bin/mlir-opt -decorate-spirv-composite-type-layout test.mlir
 #0 0x0000000000481d7d llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/ty/llvm16/llvm/lib/Support/Unix/Signals.inc:567:11
 #1 0x000000000048220b PrintStackTraceSignalHandler(void*) /home/ty/llvm16/llvm/lib/Support/Unix/Signals.inc:641:1
 #2 0x00000000004805a6 llvm::sys::RunSignalHandlers() /home/ty/llvm16/llvm/lib/Support/Signals.cpp:104:5
 #3 0x0000000000482935 SignalHandler(int) /home/ty/llvm16/llvm/lib/Support/Unix/Signals.inc:412:1
 #4 0x00007f46d06e1980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #5 0x00007f46cf5d1e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #6 0x00007f46cf5d37f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #7 0x00000000004c4940 llvm::install_out_of_memory_new_handler() /home/ty/llvm16/llvm/lib/Support/ErrorHandling.cpp:193:0
 #8 0x0000000002788db2 mlir::VulkanLayoutUtils::decorateType(mlir::Type, unsigned long&, unsigned long&) /home/ty/llvm16/mlir/lib/Dialect/SPIRV/Utils/LayoutUtils.cpp:99:1
 #9 0x00000000027889bb mlir::VulkanLayoutUtils::decorateType(mlir::spirv::StructType, unsigned long&, unsigned long&) /home/ty/llvm16/mlir/lib/Dialect/SPIRV/Utils/LayoutUtils.cpp:47:9
#10 0x00000000027888c5 mlir::VulkanLayoutUtils::decorateType(mlir::spirv::StructType) /home/ty/llvm16/mlir/lib/Dialect/SPIRV/Utils/LayoutUtils.cpp:24:10
#11 0x0000000002755799 (anonymous namespace)::SPIRVGlobalVariableOpLayoutInfoDecoration::matchAndRewrite(mlir::spirv::GlobalVariableOp, mlir::PatternRewriter&) const /home/ty/llvm16/mlir/lib/Dialect/SPIRV/Transforms/DecorateCompositeTypeLayoutPass.cpp:44:23
#12 0x000000000275aceb mlir::detail::OpOrInterfaceRewritePatternBase<mlir::spirv::GlobalVariableOp>::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const /home/ty/llvm16/mlir/include/mlir/IR/PatternMatch.h:330:12
#13 0x0000000004a54ee0 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&)>) /home/ty/llvm16/mlir/lib/Rewrite/PatternApplicator.cpp:200:25
#14 0x0000000003b10ec0 (anonymous namespace)::OperationLegalizer::legalizeWithPattern(mlir::Operation*, mlir::ConversionPatternRewriter&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:1987:21
#15 0x0000000003b105db (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:1895:17
#16 0x0000000003b0fb1f (anonymous namespace)::OperationConverter::convert(mlir::ConversionPatternRewriter&, mlir::Operation*) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:2406:26
#17 0x0000000003b073ab (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>, llvm::function_ref<void (mlir::Diagnostic&)>) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:2455:16
#18 0x0000000003b07687 mlir::applyFullConversion(llvm::ArrayRef<mlir::Operation*>, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:3377:22
#19 0x0000000003b076e6 mlir::applyFullConversion(mlir::Operation*, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:3382:10
#20 0x0000000002754b0b (anonymous namespace)::DecorateSPIRVCompositeTypeLayoutPass::runOnOperation() /home/ty/llvm16/mlir/lib/Dialect/SPIRV/Transforms/DecorateCompositeTypeLayoutPass.cpp:146:16
#21 0x0000000003a697a7 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:471:21
#22 0x0000000003a69dbd mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:534:16
#23 0x0000000003a6b6fc mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:839:10
#24 0x0000000003a6b621 mlir::PassManager::run(mlir::Operation*) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:819:60
#25 0x0000000003a61f82 performActions(llvm::raw_ostream&, bool, bool, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:91:17
#26 0x0000000003a61bdf processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, bool, bool, bool, bool, bool, bool, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, llvm::ThreadPool*) /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:139:12
#27 0x0000000003a61998 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:181:12
#28 0x0000000003a6188d mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /home/ty/llvm16/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#29 0x0000000003b93ae9 llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /home/ty/llvm16/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#30 0x0000000003b930c5 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) /home/ty/llvm16/mlir/lib/Support/ToolUtilities.cpp:28:12
#31 0x0000000003a608c3 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool) /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:186:10
#32 0x0000000003a60a5f mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool, bool) /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:209:10
#33 0x0000000003a616a1 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:306:14
#34 0x00000000004116d9 main /home/ty/llvm16/mlir/tools/mlir-opt/mlir-opt.cpp:271:7
#35 0x00007f46cf5b4c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#36 0x00000000004113ba _start (/home/ty/llvm16/llvm/mlir/build/bin/mlir-opt+0x4113ba)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWttu4zjSfhrmhoghUeeLXDhOPJMfzp8gyfQCc2NQEmVzmyY1JJWO5-kXpCTr4LjjuNPo7GIajVgHqlj1fcWq4gErRVeckAsQXILg6gxXei3kxSXB7E9SrrfyLBX59uKJKA0FhyC4XCy-3EI3BMEVQPFa61IBbwrQHKD5iup1lU4ysQFozthz-3NeSvFvkmmA5loSAtBcEkawMlduOHkBKAHOFXCm9V-lSamgFlCSUoq8yojpoW4QOs1_e7thVJ6LUsPznGRCYk3OVUnl83kmNqVQVJNzvS3JOcNbUWmoidIT882rwsxbmBmtDvRmRU82Iq8YgQuxohlm8LfF48IPHCjJXxWVREGAvLrhs9F79uxOHIBmBrnHNc6JtMDZe3PlXUMQXdbyIaw__I2JFLMvWFKcMgKB70iSVVLRZ7JUdFOaZ94UAuTW7UstgTfb3Sotq0wDbyZJZntC8VFNvWvT-lELiVfksioKIu2z5NCbGqPo6lWwMonVGmqJD7NX8TXmOSM5fLy_eTj_Ag1X9as__v_hejr7fXq5uIbkhWSVJjnEGgI0X4uN8Ru9bZzLDQGaW1LRnNEUoPkVxaz2NiP3C0DzPzRlCqD5wvqBvZtkZQm8aWKwqfu8X1xPH6-hqtIN1RDDtFoZDxRSG198t6dTpSpiOoWY55DyjFU5gXpNYA1NirOvFp5J3f2jxtlXmFebcoeXMwFOci_FSuINxHJVbQjXqub-dRwaVRo40oqy3PxS3jw8fbAYv3ag8-Ls_vmxm0c5tF16U-BN1VbVF_eScm3tebL8o7hrJPG3pVBaErwBKDR-RbkGKHnLpJrax6o0hBhKOX0xD-iKY6YmlGfAmwZhBLyp63YquyOVEXJSONKvlvG79UUJUPwsaA7Q9KOUCn3XKNXphEY6OQEOX4PxoeID1ZQdye9WqtWmdnjX8Q1QnTbeGKHEC-AYkg_kyHfREA6_USAq_DB3QuImsQOXS0mUFpIspa4jWCP9JQ6XoX_OKK9ezle8ql-Uei0JzidKmGh76by4KImdXV4x3QS9brIiyF0SR1BiqgjsDZUVo2l2Pvvyf9_-THe3aIIigObK2gHQfDIxd1uVk9IM8Ko2U23Vs9WGV-bWip5YrzT8O50m4UgTLypciFNhLT1OE53XaNivbCfxqJNoSGvmJ77TczLKlcaMLUWll6JYbshGyO2Sk2_L9Y70Exi_llJI6zaUr1qPS7yhanFfNRTFcZ4iaCONVe1Lxb5i3gvV9eM2aD2ZJIHirn39YAYrbkuZHDLBV01s2X922KTTc0gydOhkbF-Spj9gnw3S9eWjzde_3GDfRNm2ZEOe64wNjrPg4w3-CYYg30bEzhJ3aEkQRInpNsZc8O1GVApyvCGqtFktaXQ03Qxrtruy7uuGF-KqNpMKXjffYJ2tpzx_IN8k1QctHws05HYN77HWRPJGhmyIzgRXJ9dITxJzVQi5MVA1SpNZWxoYCmqb7rHa-YGBD3kdfGgEH85I3_NzojFl9fVdeSdvuCaywBlp7GisurQ1-Ow4WLzrt2G9K0nDgMnqH4RjU9F1D24eAJo3Am-NNpM18Kae5xgfQx1Ig4Tr48AnxNlXaVqWjGZYC_nR9s16aaCoeGY-XEpSAG-WCsHgQHQjoIakhqeZDhwUYsqnHxbSfdxMtB6Iqpg-Tu6RkWIH5XwP8zY-OIY8FHTk-X3yvNR1SOa8FSB29CzICjP6N2nUZ83tv6heNxocSetM8GciFRX8dQc-yvzBgG9jZBMXug52STw2Qb-dKxkogjEUQZ7-KBSf1_44CcxP1NkfDu13itQtjra_7kC39mf17cD87xvZh2MI1M8wH_lOaH7CzvxoZH7k4ePpf9383Ws1mDJOpcTbh1FYGNj87oh0RfGKC6Vp9v6w8U7gAus3PeDiMXBhHPXIxGXJtvOKsU7WSWi85khPWK6I3vOfuRR_Ez5Mwo9E9-PqT4DG8yIbUnqpMdmDhoRvQvO-gPHJIIjRsAJFo1o68FPnzWHVVmu2lDtQsjWrLxW_4z2YvjvH-_iC0fXD4WBAg4Lbw2ES4ehgxfgk7kojbZrjclcYyYqPigKl9vg_7BlTjtlWUXWLOV6Z2DqDpgoazKXeWP0Y4FR3P-9XyZE7zJwIjY3O0_zdRt_TkjDKxynTNN3Z8t08cRIKw-JSqRuutLTrkkK-Un32G_TmQK3u91gSbmdJ7UA7Pn_tAx14_si7vBHQaVhkI_1ai3ewYqWIOjKs7MF2su6xl4wCgb-nO3Lf0P07Wp-umGsUC3uKBSPF3CJGsCTShIJptp--91d8W9dqf5XOm4neGkuSL-tdik7Co6hkRm5XEnjXvYjcZ-J2cfMwE1yTF92w9KNTi-EwaicsQ9WPzQlC2DTQrsADNL9lVN6V-hbTNhck7rC-ROEY5zQvYClFRpRqNmG-D_MO1orTvyqyB-utXfRrRfXa56TAFdPLnDCiyeFvzNz7FVTe_v053AzKO5OsHsiKKi23e9PeJ7tafG-1eUfFfAyNbj2Qu6IGRWMekyTue24n4tPw-Wv4ea8XNWOwFgmQv3TqS2Ejn2iWsAGKfwVwY_retTp3nKfZJf--p8VjT4vjfl0xpOwUjj8FkLslvwwzluLs67LgA7X_GVEfOaKuDYZ2M-HX4LU_kN7Yk-oWZpsH06snM215Wswb6DG7ftESK7tA6wejUTSahCYeJsn_wGj5r4yKp1EaxkNKhwcXDKXOYINKlYzqKc_vR8XV5w4Pn4K_N1ucWDJ3W8omF_6hKaOakt2-3Zjg8TKCE2fePzXWx2WEDy1bwuFM1xsvhzg4KD45eUMi2uWM2eIeS0XkgTnqRzLyM5hBzmgNwhuvn7ghdg8y06wPZWtcrwSNZuGPWlK-eiDF8aB8pHGe3cBw_c44f3hCxnXDPIEbTPlbver9_trLFkm75NfN5ceHj1I_iyO4XDKaZkulsdTLtuNjjv9kqmpPIdWX9qWVY88CeXZjvsdjODbVSzGsO24OV518mtCetqoldsd423OeZ_mFlydegs_IhRtGceQkEUrO1hcFKhDJcZRGueOmGQoCL4zDwnPTMEhRFp_RC-Qgz_Fcz0VugJKJE_g-LhInS_wAxw4GvkM2mLKJUXIi5OrMHri8CF0vis4YTglT9lAzQpx8g_YlQAgEV2fywh7VTKuVAr7DqNKqk6KpZvY09O3i5gEEV_awJsnt4WcUHXV0EqAIfqN6DYmUQsINUQqviPn89ROvKDqrJLs4_YSptfk_AQAA__82azLE">