<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/131606>131606</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang] Crash with `no-`HLFIR` when using `iso_c_binding` `c_funloc`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jgonzac
</td>
</tr>
</table>
<pre>
Building the following reduced fortran code causes a crash (`llvm_unreachable` in debug) when building without HLFIR ([llvm godbolt](https://llvm.godbolt.org/z/G4PexP39a))
```fortran
program app
use, intrinsic :: iso_c_binding, only : c_funptr
use, intrinsic :: iso_c_binding, only : c_funloc
implicit none
contains
subroutine handler()
end subroutine
function signal(func)
procedure(handler) :: func
type(c_funptr) :: signal
signal = c_funloc(func)
end function signal
end program app
```
Compilation with `-flang-deprecated-no-hlfir` flag
```
$ flang -flang-deprecated-no-hlfir example.f90
error: loc("/app/example.f90":13:5): internal: expected a memory reference type '!fir.boxproc<() -> ()>'
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang -fc1 -triple x86_64-unknown-linux-gnu -S -fcolor-diagnostics -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu x86-64 -flang-deprecated-no-hlfir -resource-dir /opt/compiler-explorer/clang-llvmflang-trunk-20250317/lib/clang/21 -mframe-pointer=all -o /app/output.s -x f95-cpp-input /app/example.f90
#0 0x0000000003cb03c8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang+0x3cb03c8)
#1 0x0000000003cadf84 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#2 0x00007b4533042520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#3 0x0000000004d63092 fir::FirOpBuilder::createBox(mlir::Location, fir::ExtendedValue const&, bool, bool) (/opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang+0x4d63092)
#4 0x00000000042207c9 (anonymous namespace)::ScalarExprLowering::lowerIntrinsicArgumentAsBox(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&) ConvertExpr.cpp:0:0
#5 0x00000000042d720b (anonymous namespace)::ScalarExprLowering::genIntrinsicRef(Fortran::evaluate::ProcedureRef const&, std::optional<mlir::Type>, std::optional<Fortran::evaluate::SpecificIntrinsic const>) ConvertExpr.cpp:0:0
#6 0x0000000004231703 (anonymous namespace)::ScalarExprLowering::genRawProcedureRef(Fortran::evaluate::ProcedureRef const&, std::optional<mlir::Type>) ConvertExpr.cpp:0:0
#7 0x0000000004234860 (anonymous namespace)::ScalarExprLowering::genProcedureRef(Fortran::evaluate::ProcedureRef const&, std::optional<mlir::Type>) ConvertExpr.cpp:0:0
#8 0x00000000042a8b43 fir::ExtendedValue (anonymous namespace)::ScalarExprLowering::gen<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)6>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)6>> const&) ConvertExpr.cpp:0:0
#9 0x000000000421f6c8 fir::ExtendedValue (anonymous namespace)::ScalarExprLowering::gen<Fortran::evaluate::SomeType>(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&) ConvertExpr.cpp:0:0
#10 0x0000000004220ef8 Fortran::lower::createSomeExtendedAddress(mlir::Location, Fortran::lower::AbstractConverter&, Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&, Fortran::lower::SymMap&, Fortran::lower::StatementContext&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang+0x4220ef8)
#11 0x00000000040f68cd (anonymous namespace)::FirConverter::genExprAddr(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&, Fortran::lower::StatementContext&, mlir::Location*) Bridge.cpp:0:0
#12 0x0000000004126ae5 (anonymous namespace)::FirConverter::genAssignment(Fortran::evaluate::Assignment const&)::'lambda3'(Fortran::evaluate::Assignment::Intrinsic const&)::operator()(Fortran::evaluate::Assignment::Intrinsic const&) const (.isra.0) Bridge.cpp:0:0
#13 0x0000000004127af3 (anonymous namespace)::FirConverter::genAssignment(Fortran::evaluate::Assignment const&) Bridge.cpp:0:0
#14 0x000000000413109c (anonymous namespace)::FirConverter::genFIR(Fortran::lower::pft::Evaluation&, bool) (.constprop.0) Bridge.cpp:0:0
#15 0x00000000041351ec (anonymous namespace)::FirConverter::lowerFunc(Fortran::lower::pft::FunctionLikeUnit&) Bridge.cpp:0:0
#16 0x000000000413580b (anonymous namespace)::FirConverter::lowerFunc(Fortran::lower::pft::FunctionLikeUnit&) Bridge.cpp:0:0
#17 0x00000000041378bd Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&, Fortran::semantics::SemanticsContext const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang+0x41378bd)
#18 0x0000000003fb4123 Fortran::frontend::CodeGenAction::beginSourceFileAction() (/opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang+0x3fb4123)
#19 0x0000000003d06765 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang+0x3d06765)
#20 0x0000000003cf5087 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang+0x3cf5087)
#21 0x0000000003d10553 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang+0x3d10553)
#22 0x000000000209a10e fc1_main(llvm::ArrayRef<char const*>, char const*) (/opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang+0x209a10e)
#23 0x0000000001f648df main (/opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang+0x1f648df)
#24 0x00007b4533029d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#25 0x00007b4533029e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#26 0x0000000002098a75 _start (/opt/compiler-explorer/clang-llvmflang-trunk-20250317/bin/flang+0x2098a75)
```
Flang version
```
flang version 21.0.0git (https://github.com/llvm/llvm-project.git 4b86a7f3860a3cb0368e308494f65c103c02fa18)
Target: x86_64-unknown-linux-gnu
```
Is there any expectation on applying fixes to no-HLFIR mode?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMWdtu4zgS_RrmhZBBURdLD3lQnGgm2F5s0JndV4OiSjanJVIgqcSer1-Qki_ydJLpdDK7DTdiicWqc04VLyaZMWIjAa5RcoOS2ys22K3S179vlPyD8atK1fvrm0G0tZAbbLeAG9W26tk9aagHDjVulLaaScxVDZizwYDBDHPNzBYjmqGUtO1Ttx6kBsa3rGoBpQQLiWuohg2iOX7egsTVIcqzsFs1WPzrl_L-q_eQ3DgPeKPqSrUWJbeIZltre4OiAtES0dK1L6b2hdIbRMs_EC1_iR9g9xDlDNHcfUjhPikZPxNwRIpeq41mHWZ9j0iBBwOIrrCQVgtpBMcuTlRgYdSaryshHU5noWS7d42Yr5tB9la73u_t3iruu4uubwUXFkslYYTMlbRMSOPbzVBpNVghAW-ZrFvQTiPPDmOQ9ZnB2BvjZpDcCiWxSzZrEc3cm6lPrxWHetDgVD04zA-gvaHzgbHd987myPVkNLkdzcYHjKLbE69ZQA_yEhIp3Nt5Io6ZGnmsVNeLlvlerkgwSknQtExughp6DZxZqAOpgm3bCO2KrGnZ5tIPjbHvg1_uimHHur6FRZO7LqC10o7myARRimjpENLy3JBSFBVhhKIicURdwqUF7chFBYZdD9xCjRnuoFN6jzU0oEFy8MJiRJeIho3Qi0rtXE5QtBoTiwMU3eEpydGdMyTFw5e74vHO5boTFjNcDW5E9kpbbBWej46NsNuhWnDVTUNl-hP0Wv0O3CJaCmMGMIiWmMkaC8nboQY_4MeBXDH-zWrGYYFI8WgZ_4broetdCFKQBcYPh8zpzdCBtC46RrRUvXPPfepAB7DrW6VdhZXcy-9wjImwepDfAkpoQqJwiWhZCYloeUgWD3FgtehbwLssXadxMMhvUj3LoBVy2AUbOeDg0RmqVumgFmwjlbGCGxx0GlrFfeUEnaqhxb3gOOgFD1p4ghbT8UGYoBeAA8v0BmzA-8HFCtL4tWIJNBg1aA5BLfRPUm5FdTBDtKQhDrpGsw6CXvliQtEta1scKHwsQTXYfrALg4MdbvIk4H0fCNkPFn-3SonLSkQw2ZHDv4hXJOIZ9pXhB7TZm_HLgxbS-nT_5pKPaHYy0ux5rYzVwDpE02nG85OCq9QPSjyiN2Q3AZymD0SjcA6f1U0W40c_kfx6nBI9mpWbX4Rs1NoiWrjnJyVq_zWfepgF710hE_9_DECnAMsqTqKIxDShZOI1pmgqwWPpjQ18YdQi9Zh9lxPi6BxxXKcRySl2s5SXshT6X71fZmF6wzUwCzdqh2jWtQe7L1MROx7Hznc7C7KG-j-sHQBzJY2d8lEp1Z7-fkJiJiInmvGMJqVkyX1YJpXcd2owWLIOTO9rKR_xP3LWMn236_UX9QzarY3-feue7g-LaDHNK4UZRSmnxdubwhNrB2bhIEivUbR6xeJRdfCbW82iuzPBcrxS8gm0dQ6-UxTJnFy9pKR6L7kNyCO1r9C8TujhsEJ_hWaWYGPr0UL1rizcSrM6VcvE8CXD1_TpgYtG8CPEKapz9pZK6VylKFyS6CdU-sqez-l_rlBvcVtecIuzlPwEt_8fYtmcGMuqOHpphnk_37cH5T-ErMd9z8yQq65T8sRpxSxslN4jmqeOn6P48zPCu4P_wBySz4UOm5Rn_wuhj5Xxd0-kbvUml6sENBmeRfFz__lK6AId1CnqWoMxL66ML3kqKuO2sHYC55a89E_2H6PAyyAe990_Wf-WkWUW3Gq3UtLC7qDqx6_fo_bTT2MahbONVUyaNOP1W3VYCn1S9FCBTjiXp88psB9UboW_Vyh-C3ijRb2B79QonSkR0pRB8i4lCn_C4iC9rsXJ7nwkjW2ILlvWVTWL_K_Ev-ZmfL5cws-8qh40s-pwfPDzbsfvTqWFMJotyKsKRxcKL1nz5kbhExR-GeB8MxtGIcn5uwCW918vkZ2VbN9Mmt6NaH1xphf79oVH3GvVv6FqcgE6CeEdoD280h_ZvI27nI5yvohv8G8p3tQ1vYSYvb2P_pshLi8gLrOqfnHOOSy_o7fz5gtkPdPm0OlwXvLipGagY9IKPv0Sfzw8ThPbrIQ_fmEYKZ8WhtkGMWqqOKTRHG-jHTA5bUdXqoZfQBZe9fFVBRshH_1JSSlamJrGE66PPzIYIZ4IzDZeUU3SZZq8RqCcnl5hcJneSwVGGvfSWCZdKf85x98PeS_7wboAn5vjSYSjRPTiUKhJSLZ8PccXDMc5dwd8sKf0_nWNP4vnyOTEc356VIckSV6t5YnRie7TcQ_xYwVQfFIePYMTv9nWhZKchQRww8N1x1zXsyO8Qmu2dz8-oxXfMn2ot2I6NZi_-wzsE7oT9tmmIGzSOKsb7HB_fOzJ-yl2PD_0o3md_-Chn-9ycphcOoSY4PXa9Vkby7RdnzH7yyEgPguRXuQ6Y8sEj84_JVvO_xR9fjlT-mP6J9DGDYx5c3Pehmm4IAuyER7gj11ULFyvuMpStmyiLCXMnwynGUQki_O4SRMekogT2rBw-lXzmz_KR1Hx4q3Bn7ncG2y3oAEzuZ8ubsZbJyUx6_t2L-QGN2IHBluFpQrGq8pO1YCi8qq-juo8ytkVXIfLmNIwjpbp1fY65rxOkmVeQZY3URwSqKo8rLOQLeMqr9IrcX0QP6Q0DdMFpJTUFa0yvgwhWcYoJtAx0S78fafSmyt_b3MdRmFK0quWVdAaf5VL6ZQ2ipLbK33tVayGjUExaYWx5uTCCtv6-9-xR3KLV_7K53DFJlWAUuIpopSMl7WDcRKglMzvNFPi3h1v_VJyNej2-v2XUROvp2v63wAAAP__WrCE0A">