<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61875>61875</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang] flang-new crashes with "internal: expected a memory reference type '!fir.boxproc<() -> ()>' not a memory reference type"
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
k-arrows
</td>
</tr>
</table>
<pre>
Test case:
```console
$ cat iso_c_binding.f90
subroutine foo(my_func)
use iso_c_binding
implicit none
interface
subroutine print_hello() bind(C)
implicit none
end subroutine print_hello
end interface
procedure(print_hello) :: my_func
type(c_funptr) :: cptr
cptr = c_funloc(my_func)
end subroutine foo
```
Stack dump:
```console
#0 0x0000564d24bbf6ac llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
#1 0x0000564d24bbfcee SignalHandler(int) Signals.cpp:0:0
#2 0x00007fbb7474e520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#3 0x00007fbb747a2a7c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x96a7c)
#4 0x00007fbb7474e476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#5 0x00007fbb747347f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#6 0x0000564d24b87261 llvm::install_out_of_memory_new_handler()
#7 0x0000564d25ac819d fir::FirOpBuilder::createBox(mlir::Location, fir::ExtendedValue const&, bool, bool)
#8 0x0000564d250a034c (anonymous namespace)::ScalarExprLowering::lowerIntrinsicArgumentAsBox(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&) ConvertExpr.cpp:0:0
#9 0x0000564d2508ce73 (anonymous namespace)::ScalarExprLowering::genIntrinsicRef(Fortran::evaluate::ProcedureRef const&, std::optional<mlir::Type>, std::optional<Fortran::evaluate::SpecificIntrinsic const>) ConvertExpr.cpp:0:0
#10 0x0000564d2508d3ba (anonymous namespace)::ScalarExprLowering::genRawProcedureRef(Fortran::evaluate::ProcedureRef const&, std::optional<mlir::Type>) ConvertExpr.cpp:0:0
#11 0x0000564d2508f51b (anonymous namespace)::ScalarExprLowering::genProcedureRef(Fortran::evaluate::ProcedureRef const&, std::optional<mlir::Type>) ConvertExpr.cpp:0:0
#12 0x0000564d2515bcbc fir::ExtendedValue (anonymous namespace)::ScalarExprLowering::genFunctionRef<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>(Fortran::evaluate::FunctionRef<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>> const&) ConvertExpr.cpp:0:0
#13 0x0000564d2519bf35 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<std::__detail::__variant::__deduce_visit_result<fir::ExtendedValue> (*)(fir::ExtendedValue (anonymous namespace)::ScalarExprLowering::gen<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>> const&)::'lambda'(Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5> const&)&&, std::variant<Fortran::evaluate::Constant<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>, Fortran::evaluate::StructureConstructor, Fortran::evaluate::Designator<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>, Fortran::evaluate::Parentheses<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>> const&)>, std::integer_sequence<unsigned long, 4ul>>::__visit_invoke(fir::ExtendedValue (anonymous namespace)::ScalarExprLowering::gen<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>> const&)::'lambda'(Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5> const&)&&, std::variant<Fortran::evaluate::Constant<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>, Fortran::evaluate::StructureConstructor, Fortran::evaluate::Designator<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>, Fortran::evaluate::Parentheses<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>> const&) ConvertExpr.cpp:0:0
#14 0x0000564d2517c42a std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<std::__detail::__variant::__deduce_visit_result<fir::ExtendedValue> (*)(fir::ExtendedValue (anonymous namespace)::ScalarExprLowering::gen<Fortran::evaluate::SomeType>(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&)::'lambda'(Fortran::evaluate::SomeType const&)&&, std::variant<Fortran::evaluate::value::Integer<128, true, 32, unsigned int, unsigned long>, Fortran::evaluate::NullPointer, Fortran::evaluate::ProcedureDesignator, Fortran::evaluate::ProcedureRef, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)2>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)3>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>> const&)>, std::integer_sequence<unsigned long, 9ul>>::__visit_invoke(fir::ExtendedValue (anonymous namespace)::ScalarExprLowering::gen<Fortran::evaluate::SomeType>(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&)::'lambda'(Fortran::evaluate::SomeType const&)&&, std::variant<Fortran::evaluate::value::Integer<128, true, 32, unsigned int, unsigned long>, Fortran::evaluate::NullPointer, Fortran::evaluate::ProcedureDesignator, Fortran::evaluate::ProcedureRef, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)2>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)3>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>> const&) ConvertExpr.cpp:0:0
#15 0x0000564d25079637 fir::ExtendedValue (anonymous namespace)::ScalarExprLowering::gen<Fortran::evaluate::SomeType>(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&) ConvertExpr.cpp:0:0
#16 0x0000564d250795c6 Fortran::lower::createSomeExtendedAddress(mlir::Location, Fortran::lower::AbstractConverter&, Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&, Fortran::lower::SymMap&, Fortran::lower::StatementContext&)
#17 0x0000564d2502c44f (anonymous namespace)::FirConverter::genExprAddr(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&, Fortran::lower::StatementContext&, mlir::Location*) Bridge.cpp:0:0
#18 0x0000564d25048653 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<std::__detail::__variant::__deduce_visit_result<void> (*)(Fortran::common::visitors<(anonymous namespace)::FirConverter::genAssignment(Fortran::evaluate::Assignment const&)::'lambda0'(Fortran::evaluate::Assignment::Intrinsic const&), (anonymous namespace)::FirConverter::genAssignment(Fortran::evaluate::Assignment const&)::'lambda0'(Fortran::evaluate::ProcedureRef const&), (anonymous namespace)::FirConverter::genAssignment(Fortran::evaluate::Assignment const&)::'lambda0'(std::vector<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, std::allocator<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>> const&), (anonymous namespace)::FirConverter::genAssignment(Fortran::evaluate::Assignment const&)::'lambda0'(std::vector<std::pair<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>, std::allocator<std::pair<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>>> const&)>&&, std::variant<Fortran::evaluate::Assignment::Intrinsic, Fortran::evaluate::ProcedureRef, std::vector<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, std::allocator<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>>, std::vector<std::pair<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>, std::allocator<std::pair<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>>>> const&)>, std::integer_sequence<unsigned long, 0ul>>::__visit_invoke(Fortran::common::visitors<(anonymous namespace)::FirConverter::genAssignment(Fortran::evaluate::Assignment const&)::'lambda0'(Fortran::evaluate::Assignment::Intrinsic const&), (anonymous namespace)::FirConverter::genAssignment(Fortran::evaluate::Assignment const&)::'lambda0'(Fortran::evaluate::ProcedureRef const&), (anonymous namespace)::FirConverter::genAssignment(Fortran::evaluate::Assignment const&)::'lambda0'(std::vector<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, std::allocator<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>> const&), (anonymous namespace)::FirConverter::genAssignment(Fortran::evaluate::Assignment const&)::'lambda0'(std::vector<std::pair<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>, std::allocator<std::pair<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>>> const&)>&&, std::variant<Fortran::evaluate::Assignment::Intrinsic, Fortran::evaluate::ProcedureRef, std::vector<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, std::allocator<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>>, std::vector<std::pair<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>, std::allocator<std::pair<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>>>>> const&) Bridge.cpp:0:0
#19 0x0000564d2503a8a0 (anonymous namespace)::FirConverter::genAssignment(Fortran::evaluate::Assignment const&) Bridge.cpp:0:0
#20 0x0000564d2503389f (anonymous namespace)::FirConverter::genFIR(Fortran::lower::pft::Evaluation&, bool) Bridge.cpp:0:0
#21 0x0000564d2505f830 (anonymous namespace)::FirConverter::lowerFunc(Fortran::lower::pft::FunctionLikeUnit&) Bridge.cpp:0:0
#22 0x0000564d2502ae30 Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&, Fortran::semantics::SemanticsContext const&)
#23 0x0000564d24f991bd Fortran::frontend::CodeGenAction::beginSourceFileAction()
#24 0x0000564d24bde479 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&)
#25 0x0000564d24bd729a Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&)
#26 0x0000564d24be0f28 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*)
#27 0x0000564d248c2512 fc1_main(llvm::ArrayRef<char const*>, char const*)
#28 0x0000564d248c06e0 main
#29 0x00007fbb74735d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#30 0x00007fbb74735e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#31 0x0000564d248bfc65 _start
flang-new: error: unable to execute command: Aborted
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 17.0.0 (https://github.com/llvm/llvm-project.git 2d68a42f084a460007b368eab191cf0ff1b976d7)
Target: x86_64-unknown-linux-gnu
Thread model: posix
```
Program arguments:
```console
flang-new -fc1 -triple x86_64-unknown-linux-gnu -emit-obj -fcolor-diagnostics -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu x86-64 -o iso_c_binding.o -x f95-cpp-input iso_c_binding.f90
```
cf.
https://github.com/llvm/llvm-project/blob/6261adfa51f2d93c8258e7b2d9811d607f3e50a5/flang/lib/Optimizer/Builder/FIRBuilder.cpp#L517
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXNty2zjSfhr6BkUVCZ4vfKEo0f-nNrOTirN7ywLBpowJCHBBUJb36bcAUgdyLMl27LGzK1diiyTQh68bjQbAFmlbthIA1070wYk-XpFO30p1_cMlSsm79qqQ5f31d2g1oqQFJ5g73kfHmzux1_-jUrSSw3AXh4gSjVgrc5oXTJRMrGZV5vWP265QstNMAKqkdHBa3-dVJ6iDs74BQgh1LYz7D49Y3XBGmUZCii27XScmNKiKUNjfMj8HDBvFhM5vgXPD2MEZMuQdnC5G3PufB3htH4Eoj5Ht25kGE3H2FBolKZSdAgenI4kyZKAN5mgLyWFHfd-YDtQ8abQ6aE3N5Y66uUJO8BHZllzSByCeyG_sMDboIecbTegPVHZ1c8bwyMGBh7yN53leFIclDouiiglFnK_rXtb2vu0_fDV6W8rflYEIp_tGitzlstUKSO3g2MELA-XeQA4O_CkXCoBu2EoQ_v9ElByUg9O-03C7ndHGyO_Z_ztCeCCUVEWRhEkIEfaQdY0lZ4WDl5s0zuPQ5Ux0G3cluv4BnbVyFjv4g7cJcYS9kXDBmCbBJKGo0bcKSJn_YJw_jUEWk4SOGIRTocMkRqvW6vlU4cMkHtGOxrSDMKkCRAqp9NMo4zSpghHleGyzNMGxf-AZTLSacJ7LTueyymuopbrPBdzltzuLjuglh_QiQlM_K1HFVE9uydTvzYeO8RKGO1QB0fBBbsx44Nt2XyQlmklhvGzX-dNGgyih_CfhHSDj43pwxEJKvv97IE06ksYjXhBSgxgRUtzXsmuRIDW0jfX1rGdzQwkn6tOmUV_kHSgT5ex9bq4-C62YaBmdq1VXg9Dztpd9KZVWRPRNYU14RzRs5W6UEyxOtLiRNXw3gST4dKBXhhZSrEFpQ-DhgZKN9UspJMFz9VuB2Gn3DarTOn3dBstvUI1M0eqybyEbY0DCnWCxt-ug5LGGpyBqgLKK0Z2IA1dD7AxQJjJ5E6DKoCA_AdQ3cneIwOti9Qj1_Il6VeQXP6Heu9INj3Tzo4IW9FhQeL7Ky05QI6jR-OxY_ZtJT4LFFBoq61qKvYYLomEl1b2Ds8hoaxQ-BeZfI8PjI4xBPxijnxVVEO2Nm-claML49mpNFCNCby9XIPK1JgWH3KRtTrB4ZM_fOq5ZTpQi94_vlJdQdhTyNWuZzhW0HddOsHjYVQwQdu6aG-_A6Ys71Jt50eOmmxdxn76dgxNO6qIkDk5Oi_Z8xiOu5vc4yOwc4ZTaC0PibKuftMwCnaA9Nw5txVAd1fI1zXRGkhsrQafgUJrTXT6CzWXfVOy_KkqfFOIrUSD0LbTQvqYQ06E2zprMMnYFKm_hXx0ICk6w6ITdLigRl2JlGocd39Ia4qWNjEys5Q-4xLxLzLvEvEvMe8cx73x2Go6z04SGmFyy0xeJ1Lsl2qtsbTwnihoyLxET1z3C5uPnfhZ1goVv0F4grTowfwNsfu9mVLtpeXBtZ9izg-bvHedfpd1wPje8tsvog4DzyB52iX6y6WtNjt6jIsdrcffflDt-U-7Bm3IP35T7y6XH2ftLjy9B9xJ0L0H3EnR_jaB7Pj-PxucSSRYHycvv3b91XD2PQzzFIaLx2I72dHGwgz0SNby2AM3LUkHbHj0iPUZpXrRaEaoH-UxEjF_Eg_4MwnEhbu7r30hzrpEmGmoQRlQNm-1kswNwfKzsYRqG1TmPWTK1V3zrK0Y_A-fruMITFVygh-xp1nzog2LlCh72psmpdpjGUfBrrXrXkpXTNe7RWGT7StX2IevJFp_bt6gM9Kdtvm93ImfyziZNB-y22c7owHrIohbP8t6_WJcjp7vvSvx9GgrntxfPj-t-TD8tI8MLlO6n551AhHMzpt9cpj8vlt61-XZ3GsLeGrqfnSt_3nLHHOqC0ti_H9oPeN5K9WgAf-Li8BKYHme4B6G6uPclCDwrCLzAvqB3Zl_wkqi-O10uiep_zXzw65jvEn0vc9QlUf2fCUyXRPUSBF4vUT254Tsp8wlISrw3mBhPyYgnFTZBkGbP26Fffv42Fe5gH72phmj3qRfY7pgfFIGdFnJSJxNVafAMIK04S1u5eV7O7et7X9gP-Idgj4ESTw47CATe0YOF7WlYT_Dw8US4hqh22-mrkitF6uMnFy3URGhGh7rQm-3lcHoxmsF2co9qRcIqy_yiHJOtlOkvhmCwkCX8H4i5xae_VcCKiRvZKQpLxmF4dFBjaPiE45rFEsIkO8VnOVydYDQFaypo3TAO6rN9mdb4xp8Re5jlZ9F02jB4GLFookmCM3IasYkg_djdAO30HqzHQzERZ1IMCl6F01PiDIz3Uq13h1hPg3M-EmN02BemFEc-RhX185owMapJti8X9y_G0luitiDPhzg_vnfIIp2w8GLwkCW_a5JNam6jMntiETLOysw7ZLurw97RhNBDeW665a0mSlsVn8oFwjGXcR12WlQ0jlBPv29UcSJWroA7J5gjUMrM0XPUCVJwQFqiwa7IzGnEWg3NC6k0lKf627toa-ptZ1QRxqFEZWdJ7-uhuxaQu7b3ABA78J1swgWtQbVMCuQnM29mjXCrdWNjE146eLli-rYrZlTWBh3jHf0ft1HyD6B6tmIa4TJOSYgrLw1JGBsjFEGcAin8zKeVV1V-kSVxmez4fydqBSaKo8EGnfgh5J04sEXfztaQo1qWwE3rRrZsc6Jyfxt8yVBCbPU4UcC_x8GtqI9crVjD4ahQyIWaaVcWf5j2kkvlloyshGxNAEdurYAPULtWZtQwityGUZfDGjjC_QVr3YYBcrWFwaVNZ1i6cYhcOfkWCYncDaqyyKVN4zIT8o59zcSDgNBqhvpPTzOrg5cFl2aQxDj2SVmRyK9wmQU0xVEKSYHLLPX9MvaSKoDII5GDlxbN3ej6vdGsZv82s-VyW5eOl8vP34YLO0Hj4EvkJ1fldVBmQUau4NqPUw8nYRAEV7fXRZkVUZgmXlZllYdpnJYkqUgSF0mZ4DC6YtfYw4EXBL4fRtgPZmXox75fxFFUFjFJiRN6UBPGZ0a7mVSrK9a2HVzHfppEV5wUwFv7JSAYGzewDx2Mnejjlbq2iBTdqnVCj7NWt3sqmmluvz2kVzr6iPa-RBVpb6FFd0zfIgdj-8acrdOdI9g0QDWUiKC-4h8pqECBoGC_8ALZLRG_YmpWyE2jJO0TYpPYuLtz_X5tmyAh9TFCDsZXneLXT7a7haA1ljcQ_ScAAP__QUdnKQ">