<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61372>61372</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MLIR] `-convert-vector-to-llvm` crashed with error message 'decltype(auto) llvm::cast(const From&) [with To = mlir::LLVM::LLVMArrayType; '
</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 commit: https://github.com/llvm/llvm-project/commit/e0282cb4da9402de5712ac7855af6c71a03d0c19
The same crash occurred in [LLVM 16](https://github.com/llvm/llvm-project/tree/release/16.x)
steps to reproduce:
```
mlir-opt -convert-vector-to-llvm test.mlir
```
test case:
```
func.func @extract(%arg0 : vector<2xf32>) -> (vector<1xf32>, f32) {
%0 = "vector.extract"(%arg0) {position = [0]} : (vector<2xf32>) -> vector<1xf32>
%1 = "vector.extract"(%arg0) {position = [1]} : (vector<2xf32>) -> f32
return %0, %1: vector<1xf32>, f32
}
```
crash trace:
```
mlir-opt: /home/verify/llvm-project/llvm/include/llvm/Support/Casting.h:567: decltype(auto) llvm::cast(const From&) [with To = mlir::LLVM::LLVMArrayType; From = mlir::Type]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /home/verify/llvm-project/build/bin/mlir-opt -convert-vector-to-llvm test.mlir
#0 0x0000561fe364a05a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/verify/llvm-project/build/bin/mlir-opt+0x22205a)
#1 0x0000561fe364755c SignalHandler(int) Signals.cpp:0:0
#2 0x00007facaf555980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
#3 0x00007facae64de87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
#4 0x00007facae64f7f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
#5 0x00007facae63f3fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
#6 0x00007facae63f472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
#7 0x0000561fe3e1435c mlir::LLVM::ExtractValueOp::build(mlir::OpBuilder&, mlir::OperationState&, mlir::Value, llvm::ArrayRef<long>) (/home/verify/llvm-project/build/bin/mlir-opt+0x9ec35c)
#8 0x0000561fe4b0aa65 (anonymous namespace)::VectorExtractOpConversion::matchAndRewrite(mlir::vector::ExtractOp, mlir::vector::ExtractOpAdaptor, mlir::ConversionPatternRewriter&) const ConvertVectorToLLVM.cpp:0:0
#9 0x0000561fe4af1c2a mlir::ConvertOpToLLVMPattern<mlir::vector::ExtractOp>::matchAndRewrite(mlir::Operation*, llvm::ArrayRef<mlir::Value>, mlir::ConversionPatternRewriter&) const (/home/verify/llvm-project/build/bin/mlir-opt+0x16c9c2a)
#10 0x0000561fe4f79a68 mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const (/home/verify/llvm-project/build/bin/mlir-opt+0x1b51a68)
#11 0x0000561fe52e6639 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/verify/llvm-project/build/bin/mlir-opt+0x1ebe639)
#12 0x0000561fe4f84607 (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) DialectConversion.cpp:0:0
#13 0x0000561fe4f852a8 (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>, llvm::function_ref<void (mlir::Diagnostic&)>) DialectConversion.cpp:0:0
#14 0x0000561fe4f88dd0 mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>*) (/home/verify/llvm-project/build/bin/mlir-opt+0x1b60dd0)
#15 0x0000561fe4b0ee45 (anonymous namespace)::LowerVectorToLLVMPass::runOnOperation() ConvertVectorToLLVMPass.cpp:0:0
#16 0x0000561fe4f07ea9 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/verify/llvm-project/build/bin/mlir-opt+0x1adfea9)
#17 0x0000561fe4f08d03 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (.constprop.495) Pass.cpp:0:0
#18 0x0000561fe4f093ed mlir::PassManager::run(mlir::Operation*) (/home/verify/llvm-project/build/bin/mlir-opt+0x1ae13ed)
#19 0x0000561fe4efc3f3 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#20 0x0000561fe4efcb29 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPool*) MlirOptMain.cpp:0:0
#21 0x0000561fe4efce51 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>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::'lambda'(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#22 0x0000561fe4fc2c80 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/verify/llvm-project/build/bin/mlir-opt+0x1b9ac80)
#23 0x0000561fe4ef9b33 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/home/verify/llvm-project/build/bin/mlir-opt+0x1ad1b33)
#24 0x0000561fe4efd238 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) (/home/verify/llvm-project/build/bin/mlir-opt+0x1ad5238)
#25 0x0000561fe3616470 main (/home/verify/llvm-project/build/bin/mlir-opt+0x1ee470)
#26 0x00007facae630c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#27 0x0000561fe362910a _start (/home/verify/llvm-project/build/bin/mlir-opt+0x20110a)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWstu4zjWfhpmQ8SgSF0XWTgX4-8fFSSoBLXojUFRRzanZVFDUpW4n35ASrYlOa44VZmengG6y5JInst3riTDjZGrGuAKRdcour3grV0rfXUNvPodmvVWX-Sq2F49g7FY1ViozUZaxOZ4bW1jEJsjukB0sZJ23eYzoTaILqrq--7nstHqHyAsoot-KV0AoSkVeVjwLCS0gCgJKBdJGkW8jEUScMIKIoIMkVtE5s9rwIZvAAvNzRorIVqtocCyxii6_vLl2z0OYhTdIpp-WCSrARBdaKiAG_cUxLNXRHvO3b_GQmOwVVhDo1XRCnAcugkx6f_zr5tK6kvVWHwpVP0dtL38DsIqfWnVpWOMLRg7c7PeXO5GsXBynKBftrWYuX8wCgm8Ws2dEimiEdcrgp1ROoaI3dDXklHE7hDN8CVidxjRdD8Y7AdvsHuiGUbJdccEY0QjR-wWI0q7JbM9M3rg169qlJFWqrpbEV0TZ4rk1ksz5Hkk0LE0B_7Bz_MPzuXvXjuOGmyra6-3Q8TxH2E5hauzTXL7ppE6L3XivusnnYiLtdo41_sOWpbbYx_tPVfWomoLOHx4aptGaTfjhhsr69Vsjdg8ihNHtgBR2W0DiKa8tcop7ZexOWJzwY3zG6FqY_FCu_iIPZrR9Yu0a_ysPJjeUf0CF2SHp7nWfPvsiLNrv3wy2w9Ft06MuTGgO-vERBqO2M2z8kim33jleTrWsTO1l4rdPG-7cTfI9ardQG2xKrGshdo03Mq8AtypFnh_SHDJZQXFrAP38cvd_OkOmzbfSIs5ztuVi1ylrYvhD2cIaUwLBtEF5rXLOd4I2K536Sjn4g9v7J79k-XiD1y0m2ZvfTJDJHvUaqX5Zq-SOc_4eSurwv3KGtHFRxMMRpQRTF4JISSKgxJYHHIS8YEvmK3pHh61rK2X_tn7Lk0PkzR_WSpjNfDOVW6wrG1nvfRndUD0mrxSSknE9wnXyRtM5E2iSOAnuap59X-8LirQiKY9--6zmYnGoU38_3tCtCeUlFzwMoqiLCV4udRgrNKw1LaXvpI5oovXNF7G4WUl6_b1clW33UBj1xp4MTNqRrzAAc1SMpKXDdlAHBaQJlhzaQAPdF9VMheXN9_-_-X3fP9KZzRBdGG8FoguZjP3tjUFNM7j2lq-dh--e2nq1r160jPhQj0YKxxOJCmTMsA8V17T8ySxRYeGX-WZpBMm0ZgJK1nJ8XLJfaAvXSQuc36-7t26_UPHMhuzjKcsw4SeYTvhrBZ7qzESJnRktWTkZRCELBJvJry7rvJ841ULD033rVcsPcx_aK7dN-ebPjyGI6C5y4BPlls4GvZ03adDsPn0-hVKxG4qVa_6kvWrkZaBYJEYYZAOMQhzwnkcOT68VvV2o1qDa74B0_hskPXy-nzTg_LQ3Pg0ZKSqu-ENt2I9r4uv8KKlU3eA0a6cDlB9aMZovDllXvDGfR3NPDB-5NaCrnuOui9lXW3rZtlO6GflrPp2rshGUPAyEJQfcbMPTUejZ4nYzXvasbv3cdl7CKLzk54w9ZiuGfkoHr_qREEsMkEP-dql61F9Ccsk43H6I8E-Dshh5N-qWx4FPE5Huo1qUUQhjll2LM68aSop-N78n6fb0Blc3-8WLrV3iFypCo9I9wQ6ODpoejc5SeS7ksUvExlkTbWSgldfwbSVPY_urye2AHKIWTayGx37ZBrGJHkvs-0t8wVWvJJ_Qi951b-eacb3AvFW8gqEPUw7TkhOAzbRIKI8PVuDPl3tNBC77NUPm1Fv92aSGen3YSe6lXxVK2OlGFn6TNXDieppUZABwLxpqu0j11byalB-PmqdZ65XYI_q8UKrP2Fns96CT2AHfjtE4hZqA09gT2N3PP2eN7_VpfrhEgeprx13_sMnBEkek6IgoyCJJuUfIHy3_H9RL6CH5fSRm37_oNv6oR4o4jdwbxRgt-Jtw8djw5ME-DDbFmC5rHaAPauHxpHadQc7GSZZx5gjHzjtHfOaV1sjzT2v-Qp8x-HSrPtta39KVnzWxifgRQl8nLWSif5pQdiH9X-UDVSynqYrN3Wv1qkW9ecBGRcyY36rjdV-n-sat6NKN5zQce4GetkfuYbauijZxd0uCGb-vdGqmYVZ5D6edqd0AmfGoJhIsdPrTecZw_IZJoeAQTEy-bjvhFKwkuEGdKn0Zi6Ok_XxRtzYot_Ir7mGYtlY7TYO-xVPqtUC7lcasbtRFjsoev_lt683qrbwao9sdV9J_dDYey5dVSnlaljB8WD0TRtQMtUvpxlutBJgzHVbln4zf5Z6bS3_2cKRevewUXq7IzWYX0DJ28ouC6jAwuk1fZY9V-fhvL6efYWVNFZvj6rDsz87ePQBMz8LrmAKF0QBPtVf_UxD9tfBedqo2X5XJHhV5Vz8sSzHe6kBTn9D93jb7GeGTDcF0aTim7zgiCZ_J6vQ1J84_KXA_kCk9wNm0ugLKtJhr2iaStp5XTxOMs5_Qrv_wiD94YxDK9D9fkaTmnGRjppUyiYZMcsZezvW_tcyxWe0mEHO2AjOcAJnQVl6Es6-sxNr3vVwk93Mk9WyXrmd4xlKf5qP8CKibHRKQ6PxjUEQhwnBGy7rTzhbgDAZO-T0MJqINMHLZSVzsTSWa7vsOZ91_C1Muzv37x79oKfjj8JZGI4T3vjcOqZZQDjuGP_6ZQwJAsInt9-Tq8uL4ooVGcv4BVwFcZImJAnS8GJ9BQFkWUGioGAsy8MkFzwp0zCHKC_iMoMLeUUJZYQFLAgYI-Es5yxh3BFJGWepQCGBDZfVzEk8U3p14e_eruKAJfSi4jlUxv-RAqU1vGA_iChF0e2FvvJa5u3KoJBU0lhzoGKlrfxfN7g-F0W3GMXkxP0Zikl3rQcF9jehoLXSeAPG8BVgRJO_7F4V0eSi1dXVz19Yetz-FQAA___sSG4d">