f18-llvm-project
f18-llvm-project copied to clipboard
fatal internal error: CHECK(p) failed at flang/f18-llvm-project/flang/include/flang/Semantics/symbol.h(552)
bbc crashed.
module broyden_func_interface
abstract interface
function broyden_func(x)
real(8), dimension(:), intent(in) :: x
real(8), dimension(size(x)) :: broyden_func
end function
end interface
end module
subroutine fdjac(x,df)
use broyden_func_interface
implicit none
procedure(broyden_func), pointer :: funcv
real(8), dimension(:), intent(inout) :: x
real(8), dimension(:,:), intent(out) :: df
df(:,1) = funcv(x)
end
with stack dump
Stack dump:
0. Program arguments: /home/ryuta/packages/llvm/flang/build/bin/bbc check_p.f90
#0 0x00007fa7d74f0c73 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/ryuta/packages/llvm/flang/build/lib/libLLVMSupport.so.13git+0x229c73)
#1 0x00007fa7d74ee57e llvm::sys::RunSignalHandlers() (/home/ryuta/packages/llvm/flang/build/lib/libLLVMSupport.so.13git+0x22757e)
#2 0x00007fa7d74f12ef SignalHandler(int) Signals.cpp:0:0
#3 0x00007fa7db644630 __restore_rt sigaction.c:0:0
#4 0x00007fa7d6afa387 raise (/lib64/libc.so.6+0x36387)
#5 0x00007fa7d6afba78 abort (/lib64/libc.so.6+0x37a78)
#6 0x00007fa7d7eb4e86 (/home/ryuta/packages/llvm/flang/build/lib/libFortranCommon.so.13git+0x2e86)
#7 0x00007fa7db53a4b3 Fortran::lower::mapCallInterfaceSymbols(Fortran::lower::AbstractConverter&, Fortran::lower::CallerInterface const&, Fortran::lower::SymMap&) (/home/ryuta/packages/llvm/flang/build/lib/libFortranLower.so.13git+0x40d4b3)
#8 0x00007fa7db386afd (anonymous namespace)::ScalarExprLowering::genProcedureRef(Fortran::evaluate::ProcedureRef const&, llvm::Optional<mlir::Type>) ConvertExpr.cpp:0:0
#9 0x00007fa7db3cc4c4 decltype(auto) std::__1::__variant_detail::__visitation::__base::__dispatcher<15ul>::__dispatch<std::__1::__variant_detail::__visitation::__variant::__value_visitor<fir::ExtendedValue (anonymous namespace)::ScalarExprLowering::genval<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> > const&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> const&)>&&, std::__1::__variant_detail::__base<(std::__1::__variant_detail::_Trait)1, Fortran::evaluate::ComplexComponent<8>, Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::Negate<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::Add<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::Subtract<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::Multiply<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::Divide<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::Power<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::RealToIntPower<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::Extremum<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8>, (Fortran::common::TypeCategory)0>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8>, (Fortran::common::TypeCategory)1>, Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> > > const&>(Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8>, std::__1::__variant_detail::__visitation::__variant::__value_visitor<fir::ExtendedValue (anonymous namespace)::ScalarExprLowering::genval<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> >(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> > const&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8> const&)>&&...) ConvertExpr.cpp:0:0
Procedure pointers are not yet lowered (dummy procedures are), I believe they are F2003. However, bbc should at least raise a clear TODO message for now.