llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.04k stars 11.58k forks source link

[Flang] Compilation error of a large array with initialization #78931

Closed yus3710-fj closed 5 months ago

yus3710-fj commented 8 months ago

This is an issue from Fujitsu testsuite.

Flang-new terminates abnormally when compiling a large array with initialization. Gfortran emits a warning message and ifort emits an error message for such a large array.

The following are the test program, Flang-new , gfortran and ifort compilation result.

! test.f90
real:: a(999999,999999,99999,99999,99999)=1.1
end
$ flang-new -v test.f90 
flang-new version 18.0.0git (https://github.com/llvm/llvm-project.git 2af0695b875911144ed1f7b4e5679be500b86a77)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /path/to/install/bin
Found candidate GCC installation: /opt/rh/gcc-toolset-12/root/usr/lib/gcc/aarch64-redhat-linux/12
Selected GCC installation: /opt/rh/gcc-toolset-12/root/usr/lib/gcc/aarch64-redhat-linux/12
Candidate multilib: .;@m64
Selected multilib: .;@m64
 "/path/to/install/bin/flang-new" -fc1 -triple aarch64-unknown-linux-gnu -emit-obj -fcolor-diagnostics -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu generic -target-feature +neon -target-feature +v8a -mframe-pointer=non-leaf -o /tmp/test-afb2b9.o -x f95-cpp-input test.f90

fatal internal error: CHECK(optN) failed at /path/to/llvm-project/flang/lib/Evaluate/constant.cpp(163)
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /path/to/install/bin/flang-new -fc1 -triple aarch64-unknown-linux-gnu -emit-obj -fcolor-diagnostics -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu generic -target-feature +neon -target-feature +v8a -mframe-pointer=non-leaf -o /tmp/test-afb2b9.o -x f95-cpp-input test.f90
 #0 0x0000ffff8eb648a0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/path/to/install/lib/libLLVMSupport.so.18git+0x1a48a0)
 #1 0x0000ffff8eb627d0 llvm::sys::RunSignalHandlers() (/path/to/install/lib/libLLVMSupport.so.18git+0x1a27d0)
 #2 0x0000ffff8eb62954 SignalHandler(int) Signals.cpp:0:0
 #3 0x0000ffff914907a0 (linux-vdso.so.1+0x7a0)
 #4 0x0000ffff8e5b6274 raise (/lib64/libc.so.6+0x36274)
 #5 0x0000ffff8e5a0a2c abort (/lib64/libc.so.6+0x20a2c)
 #6 0x0000ffff85b8241c (/path/to/install/lib/libFortranCommon.so.18git+0x241c)
 #7 0x0000ffff8728bddc (/path/to/install/lib/libFortranEvaluate.so.18git+0x11cbddc)
 #8 0x0000ffff8728fcf8 Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>::Reshape(std::vector<long, std::allocator<long>>&&) const (/path/to/install/lib/libFortranEvaluate.so.18git+0x11cfcf8)
 #9 0x0000ffff872461b4 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>> (*)(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>&&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>&&)&&, std::variant<Fortran::evaluate::ComplexComponent<4>, Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Negate<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Add<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Subtract<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Multiply<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Divide<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Power<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::RealToIntPower<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Extremum<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)0>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)1>, Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>>&&)>, std::tuple<std::variant<Fortran::evaluate::ComplexComponent<4>, Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Negate<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Add<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Subtract<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Multiply<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Divide<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Power<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::RealToIntPower<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Extremum<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)0>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)1>, Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>>&&>, std::integer_sequence<unsigned long, 12ul>>::__visit_invoke(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>&&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>&&)&&, std::variant<Fortran::evaluate::ComplexComponent<4>, Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Negate<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Add<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Subtract<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Multiply<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Divide<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Power<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::RealToIntPower<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Extremum<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)0>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)1>, Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>>&&) (/path/to/install/lib/libFortranEvaluate.so.18git+0x11861b4)
#10 0x0000ffff8721196c std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>> (*)(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>&&)::'lambda'(Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>&&)&&, std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 3>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 10>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 16>>>&&)>, std::tuple<std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 3>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 10>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 16>>>&&>, std::integer_sequence<unsigned long, 2ul>>::__visit_invoke(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>&&)::'lambda'(Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>&&)&&, std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 3>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 10>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 16>>>&&) (/path/to/install/lib/libFortranEvaluate.so.18git+0x115196c)
#11 0x0000ffff87205314 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<Fortran::evaluate::Expr<Fortran::evaluate::SomeType> (*)(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::SomeType>(Fortran::evaluate::Expr<Fortran::evaluate::SomeType>&&)::'lambda'(Fortran::evaluate::SomeType&&)&&, 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>>>&&)>, std::tuple<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>>>&&>, std::integer_sequence<unsigned long, 5ul>>::__visit_invoke(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::SomeType>(Fortran::evaluate::Expr<Fortran::evaluate::SomeType>&&)::'lambda'(Fortran::evaluate::SomeType&&)&&, 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>>>&&) (/path/to/install/lib/libFortranEvaluate.so.18git+0x1145314)
#12 0x0000ffff8724e4a8 Fortran::evaluate::NonPointerInitializationExpr(Fortran::semantics::Symbol const&, Fortran::evaluate::Expr<Fortran::evaluate::SomeType>&&, Fortran::evaluate::FoldingContext&, Fortran::semantics::Scope const*) (/path/to/install/lib/libFortranEvaluate.so.18git+0x118e4a8)
#13 0x0000ffff89a21368 std::optional<Fortran::evaluate::Expr<Fortran::evaluate::SomeType>> Fortran::semantics::BaseVisitor::EvaluateNonPointerInitializer<Fortran::parser::Constant<Fortran::common::Indirection<Fortran::parser::Expr, false>>>(Fortran::semantics::Symbol const&, Fortran::parser::Constant<Fortran::common::Indirection<Fortran::parser::Expr, false>> const&, Fortran::parser::CharBlock) crtstuff.c:0:0
#14 0x0000ffff89a21560 Fortran::semantics::DeclarationVisitor::NonPointerInitialization(Fortran::parser::Name const&, Fortran::parser::Constant<Fortran::common::Indirection<Fortran::parser::Expr, false>> const&) (.part.22618) resolve-names.cpp:0:0
#15 0x0000ffff89a217a0 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>(std::variant<Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&)&&, std::variant<Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>> const&)>, std::tuple<std::variant<Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>> const&>, std::integer_sequence<unsigned long, 8ul>>::__visit_invoke(void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>(std::variant<Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&)&&, std::variant<Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>> const&) (/path/to/install/lib/libFortranSemantics.so.18git+0x20a17a0)
#16 0x0000ffff899e945c std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery>(std::variant<Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&)&&, std::variant<Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery> const&)>, std::tuple<std::variant<Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery> const&>, std::integer_sequence<unsigned long, 0ul>>::__visit_invoke(void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery>(std::variant<Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&)&&, std::variant<Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery> const&) (/path/to/install/lib/libFortranSemantics.so.18git+0x206945c)
#17 0x0000ffff89a22d58 void Fortran::parser::ForEachInTuple<0ul, void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>>(std::tuple<std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&), std::tuple<std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>>>(std::tuple<std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>> const&, void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>>(std::tuple<std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&)) (/path/to/install/lib/libFortranSemantics.so.18git+0x20a2d58)
#18 0x0000ffff89a22df0 Fortran::semantics::ResolveNamesVisitor::FinishSpecificationParts(Fortran::semantics::ProgramTree const&) (.part.30892) resolve-names.cpp:0:0
#19 0x0000ffff89a31be8 Fortran::semantics::ResolveNamesVisitor::Pre(Fortran::parser::ProgramUnit const&) (/path/to/install/lib/libFortranSemantics.so.18git+0x20b1be8)
#20 0x0000ffff89a3254c Fortran::semantics::ResolveNames(Fortran::semantics::SemanticsContext&, Fortran::parser::Program const&, Fortran::semantics::Scope&) (/path/to/install/lib/libFortranSemantics.so.18git+0x20b254c)
#21 0x0000ffff89aa5f6c Fortran::semantics::Semantics::Perform() (/path/to/install/lib/libFortranSemantics.so.18git+0x2125f6c)
#22 0x0000ffff8f9c0e34 Fortran::frontend::FrontendAction::runSemanticChecks() (/path/to/install/lib/libflangFrontend.so.18git+0x190e34)
#23 0x0000ffff8fa7d240 Fortran::frontend::CodeGenAction::beginSourceFileAction() (/path/to/install/lib/libflangFrontend.so.18git+0x24d240)
#24 0x0000ffff8f9c0480 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/path/to/install/lib/libflangFrontend.so.18git+0x190480)
#25 0x0000ffff8f9b4598 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/path/to/install/lib/libflangFrontend.so.18git+0x184598)
#26 0x0000ffff8ff15020 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/path/to/install/lib/libflangFrontendTool.so.18git+0x5020)
#27 0x0000000000405eb8 fc1_main(llvm::ArrayRef<char const*>, char const*) (/path/to/install/bin/flang-new+0x405eb8)
#28 0x0000000000404ae0 main (/path/to/install/bin/flang-new+0x404ae0)
#29 0x0000ffff8e5a4384 __libc_start_main (/lib64/libc.so.6+0x24384)
#30 0x0000000000404d28 _start (/path/to/install/bin/flang-new+0x404d28)
flang-new: error: unable to execute command: Aborted (core dumped)
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 18.0.0git (https://github.com/llvm/llvm-project.git 2af0695b875911144ed1f7b4e5679be500b86a77)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /path/to/install/bin
flang-new: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
flang-new: note: diagnostic msg: /tmp/test-3332e3
flang-new: note: diagnostic msg: /tmp/test-3332e3.sh
flang-new: note: diagnostic msg: 

********************
$ gfortran-13.2 test.f90 
test.f90:2:3:

    2 | end
      |   1
Warning: size of ‘a’ 12571013788229022076(OVF) bytes exceeds maximum object size 9223372036854775807 [-Wlarger-than=]
$
$ ifort test.f90 
test.f90(1): error #6930: The size of the array dimension is too large, and overflow occurred when computing the array size.   [A]
real:: a(999999,999999,99999,99999,99999)=1.1
-------^
test.f90(1): error #6349: Integer overflow occurred when evaluating the offset from zero.   [A]
real:: a(999999,999999,99999,99999,99999)=1.1
-------^
compilation aborted for test.f90 (code 1)

Flang-new also emits a warning message if initialization is removed.

$ cat tp.f90
real:: a(999999,999999,99999,99999,99999)
end
$ flang-new tp.f90
warning: INTEGER(8) multiplication overflowed
$
llvmbot commented 8 months ago

@llvm/issue-subscribers-flang-frontend

Author: Yusuke MINATO (yus3710-fj)

This is an issue from Fujitsu testsuite. Flang-new terminates abnormally when compiling a large array with initialization. Gfortran emits a warning message and ifort emits an error message for such a large array. The following are the test program, Flang-new , gfortran and ifort compilation result. ```fortran ! test.f90 real:: a(999999,999999,99999,99999,99999)=1.1 end ``` ```console $ flang-new -v test.f90 flang-new version 18.0.0git (https://github.com/llvm/llvm-project.git 2af0695b875911144ed1f7b4e5679be500b86a77) Target: aarch64-unknown-linux-gnu Thread model: posix InstalledDir: /path/to/install/bin Found candidate GCC installation: /opt/rh/gcc-toolset-12/root/usr/lib/gcc/aarch64-redhat-linux/12 Selected GCC installation: /opt/rh/gcc-toolset-12/root/usr/lib/gcc/aarch64-redhat-linux/12 Candidate multilib: .;@m64 Selected multilib: .;@m64 "/path/to/install/bin/flang-new" -fc1 -triple aarch64-unknown-linux-gnu -emit-obj -fcolor-diagnostics -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu generic -target-feature +neon -target-feature +v8a -mframe-pointer=non-leaf -o /tmp/test-afb2b9.o -x f95-cpp-input test.f90 fatal internal error: CHECK(optN) failed at /path/to/llvm-project/flang/lib/Evaluate/constant.cpp(163) PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. Stack dump: 0. Program arguments: /path/to/install/bin/flang-new -fc1 -triple aarch64-unknown-linux-gnu -emit-obj -fcolor-diagnostics -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu generic -target-feature +neon -target-feature +v8a -mframe-pointer=non-leaf -o /tmp/test-afb2b9.o -x f95-cpp-input test.f90 #0 0x0000ffff8eb648a0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/path/to/install/lib/libLLVMSupport.so.18git+0x1a48a0) #1 0x0000ffff8eb627d0 llvm::sys::RunSignalHandlers() (/path/to/install/lib/libLLVMSupport.so.18git+0x1a27d0) #2 0x0000ffff8eb62954 SignalHandler(int) Signals.cpp:0:0 #3 0x0000ffff914907a0 (linux-vdso.so.1+0x7a0) #4 0x0000ffff8e5b6274 raise (/lib64/libc.so.6+0x36274) #5 0x0000ffff8e5a0a2c abort (/lib64/libc.so.6+0x20a2c) #6 0x0000ffff85b8241c (/path/to/install/lib/libFortranCommon.so.18git+0x241c) #7 0x0000ffff8728bddc (/path/to/install/lib/libFortranEvaluate.so.18git+0x11cbddc) #8 0x0000ffff8728fcf8 Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>::Reshape(std::vector<long, std::allocator<long>>&&) const (/path/to/install/lib/libFortranEvaluate.so.18git+0x11cfcf8) #9 0x0000ffff872461b4 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>> (*)(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>&&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>&&)&&, std::variant<Fortran::evaluate::ComplexComponent<4>, Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Negate<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Add<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Subtract<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Multiply<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Divide<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Power<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::RealToIntPower<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Extremum<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)0>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)1>, Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>>&&)>, std::tuple<std::variant<Fortran::evaluate::ComplexComponent<4>, Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Negate<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Add<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Subtract<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Multiply<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Divide<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Power<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::RealToIntPower<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Extremum<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)0>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)1>, Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>>&&>, std::integer_sequence<unsigned long, 12ul>>::__visit_invoke(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>&&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>&&)&&, std::variant<Fortran::evaluate::ComplexComponent<4>, Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Negate<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Add<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Subtract<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Multiply<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Divide<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Power<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::RealToIntPower<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Extremum<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)0>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>, (Fortran::common::TypeCategory)1>, Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>>&&) (/path/to/install/lib/libFortranEvaluate.so.18git+0x11861b4) #10 0x0000ffff8721196c std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>> (*)(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>&&)::'lambda'(Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>&&)&&, std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 3>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 10>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 16>>>&&)>, std::tuple<std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 3>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 10>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 16>>>&&>, std::integer_sequence<unsigned long, 2ul>>::__visit_invoke(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>&&)::'lambda'(Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>&&)&&, std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 3>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 10>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 16>>>&&) (/path/to/install/lib/libFortranEvaluate.so.18git+0x115196c) #11 0x0000ffff87205314 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<Fortran::evaluate::Expr<Fortran::evaluate::SomeType> (*)(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::SomeType>(Fortran::evaluate::Expr<Fortran::evaluate::SomeType>&&)::'lambda'(Fortran::evaluate::SomeType&&)&&, 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>>>&&)>, std::tuple<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>>>&&>, std::integer_sequence<unsigned long, 5ul>>::__visit_invoke(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::SomeType>(Fortran::evaluate::Expr<Fortran::evaluate::SomeType>&&)::'lambda'(Fortran::evaluate::SomeType&&)&&, 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>>>&&) (/path/to/install/lib/libFortranEvaluate.so.18git+0x1145314) #12 0x0000ffff8724e4a8 Fortran::evaluate::NonPointerInitializationExpr(Fortran::semantics::Symbol const&, Fortran::evaluate::Expr<Fortran::evaluate::SomeType>&&, Fortran::evaluate::FoldingContext&, Fortran::semantics::Scope const*) (/path/to/install/lib/libFortranEvaluate.so.18git+0x118e4a8) #13 0x0000ffff89a21368 std::optional<Fortran::evaluate::Expr<Fortran::evaluate::SomeType>> Fortran::semantics::BaseVisitor::EvaluateNonPointerInitializer<Fortran::parser::Constant<Fortran::common::Indirection<Fortran::parser::Expr, false>>>(Fortran::semantics::Symbol const&, Fortran::parser::Constant<Fortran::common::Indirection<Fortran::parser::Expr, false>> const&, Fortran::parser::CharBlock) crtstuff.c:0:0 #14 0x0000ffff89a21560 Fortran::semantics::DeclarationVisitor::NonPointerInitialization(Fortran::parser::Name const&, Fortran::parser::Constant<Fortran::common::Indirection<Fortran::parser::Expr, false>> const&) (.part.22618) resolve-names.cpp:0:0 #15 0x0000ffff89a217a0 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>(std::variant<Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&)&&, std::variant<Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>> const&)>, std::tuple<std::variant<Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>> const&>, std::integer_sequence<unsigned long, 8ul>>::__visit_invoke(void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>(std::variant<Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&)&&, std::variant<Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::GenericStmt, false>>, Fortran::common::Indirection<Fortran::parser::InterfaceBlock, false>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::OldParameterStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ProcedureDeclarationStmt, false>>, Fortran::parser::Statement<Fortran::parser::OtherSpecificationStmt>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::TypeDeclarationStmt, false>>, Fortran::common::Indirection<Fortran::parser::StructureDef, false>, Fortran::common::Indirection<Fortran::parser::OpenACCDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::OpenMPDeclarativeConstruct, false>, Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>> const&) (/path/to/install/lib/libFortranSemantics.so.18git+0x20a17a0) #16 0x0000ffff899e945c std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery>(std::variant<Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&)&&, std::variant<Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery> const&)>, std::tuple<std::variant<Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery> const&>, std::integer_sequence<unsigned long, 0ul>>::__visit_invoke(void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery>(std::variant<Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&)&&, std::variant<Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::EntryStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::StmtFunctionStmt, false>>, Fortran::parser::ErrorRecovery> const&) (/path/to/install/lib/libFortranSemantics.so.18git+0x206945c) #17 0x0000ffff89a22d58 void Fortran::parser::ForEachInTuple<0ul, void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>>(std::tuple<std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&), std::tuple<std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>>>(std::tuple<std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>> const&, void Fortran::parser::Walk<Fortran::semantics::DeferredCheckVisitor, std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>>(std::tuple<std::__cxx11::list<Fortran::parser::OpenACCDeclarativeConstruct, std::allocator<Fortran::parser::OpenACCDeclarativeConstruct>>, std::__cxx11::list<Fortran::parser::OpenMPDeclarativeConstruct, std::allocator<Fortran::parser::OpenMPDeclarativeConstruct>>, std::__cxx11::list<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>, std::allocator<Fortran::common::Indirection<Fortran::parser::CompilerDirective, false>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::UseStmt, false>>>>, std::__cxx11::list<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>, std::allocator<Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::ImportStmt, false>>>>, Fortran::parser::ImplicitPart, std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>>> const&, Fortran::semantics::DeferredCheckVisitor&)::'lambda'(Fortran::semantics::DeferredCheckVisitor const&)) (/path/to/install/lib/libFortranSemantics.so.18git+0x20a2d58) #18 0x0000ffff89a22df0 Fortran::semantics::ResolveNamesVisitor::FinishSpecificationParts(Fortran::semantics::ProgramTree const&) (.part.30892) resolve-names.cpp:0:0 #19 0x0000ffff89a31be8 Fortran::semantics::ResolveNamesVisitor::Pre(Fortran::parser::ProgramUnit const&) (/path/to/install/lib/libFortranSemantics.so.18git+0x20b1be8) #20 0x0000ffff89a3254c Fortran::semantics::ResolveNames(Fortran::semantics::SemanticsContext&, Fortran::parser::Program const&, Fortran::semantics::Scope&) (/path/to/install/lib/libFortranSemantics.so.18git+0x20b254c) #21 0x0000ffff89aa5f6c Fortran::semantics::Semantics::Perform() (/path/to/install/lib/libFortranSemantics.so.18git+0x2125f6c) #22 0x0000ffff8f9c0e34 Fortran::frontend::FrontendAction::runSemanticChecks() (/path/to/install/lib/libflangFrontend.so.18git+0x190e34) #23 0x0000ffff8fa7d240 Fortran::frontend::CodeGenAction::beginSourceFileAction() (/path/to/install/lib/libflangFrontend.so.18git+0x24d240) #24 0x0000ffff8f9c0480 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/path/to/install/lib/libflangFrontend.so.18git+0x190480) #25 0x0000ffff8f9b4598 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/path/to/install/lib/libflangFrontend.so.18git+0x184598) #26 0x0000ffff8ff15020 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/path/to/install/lib/libflangFrontendTool.so.18git+0x5020) #27 0x0000000000405eb8 fc1_main(llvm::ArrayRef<char const*>, char const*) (/path/to/install/bin/flang-new+0x405eb8) #28 0x0000000000404ae0 main (/path/to/install/bin/flang-new+0x404ae0) #29 0x0000ffff8e5a4384 __libc_start_main (/lib64/libc.so.6+0x24384) #30 0x0000000000404d28 _start (/path/to/install/bin/flang-new+0x404d28) flang-new: error: unable to execute command: Aborted (core dumped) flang-new: error: flang frontend command failed due to signal (use -v to see invocation) flang-new version 18.0.0git (https://github.com/llvm/llvm-project.git 2af0695b875911144ed1f7b4e5679be500b86a77) Target: aarch64-unknown-linux-gnu Thread model: posix InstalledDir: /path/to/install/bin flang-new: note: diagnostic msg: ******************** PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT: Preprocessed source(s) and associated run script(s) are located at: flang-new: note: diagnostic msg: /tmp/test-3332e3 flang-new: note: diagnostic msg: /tmp/test-3332e3.sh flang-new: note: diagnostic msg: ******************** ``` ```console $ gfortran-13.2 test.f90 test.f90:2:3: 2 | end | 1 Warning: size of ‘a’ 12571013788229022076(OVF) bytes exceeds maximum object size 9223372036854775807 [-Wlarger-than=] $ ``` ```console $ ifort test.f90 test.f90(1): error #6930: The size of the array dimension is too large, and overflow occurred when computing the array size. [A] real:: a(999999,999999,99999,99999,99999)=1.1 -------^ test.f90(1): error #6349: Integer overflow occurred when evaluating the offset from zero. [A] real:: a(999999,999999,99999,99999,99999)=1.1 -------^ compilation aborted for test.f90 (code 1) ``` Flang-new also emits a warning message if initialization is removed. ```console $ cat tp.f90 real:: a(999999,999999,99999,99999,99999) end $ flang-new tp.f90 warning: INTEGER(8) multiplication overflowed $ ```
ceseo commented 7 months ago

The overflow is being correctly verified. The problem here is that all the checks in flang/lib/Evaluate/constant.cpp result in a fatal error, not a warning (the CHECK() call will kill the compiler and show the stack trace). This is not really a bug, but expected behavior, considering how the code is currently written.

I think that the compiler should fail more graciously in this scenario, though. But that would probably require creating a new function to emit proper warnings.

Any opinions?

ceseo commented 5 months ago

@klausler do you have an opinion about the comment above?

klausler commented 5 months ago

I agree.