llvm / llvm-project

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

[Flang] Compilation error/aborting (very large number of elements in an array) #63771

Closed ohno-fj closed 11 months ago

ohno-fj commented 1 year ago
Version of flang-new : 17.0.0(36999318f09122fa41baff838f46c753db078275)

This program is for error checking.
Compilation of a program that satisfies all of the following conditions terminates abnormally.

  1. There is an array.
  2. The number of elements in the array in 1. is a very large number. Check result at 576460752303423487 (= z '07 ffffffffffffffffffff')
  3. PRINT statement outputs the values of the array in 1.

Gfortran failed to compile due to insufficient disk space in the primary file creation environment during compilation. ifort terminate with an error message.

The following are the test program, results of Flang-new, Gfortran and ifort compilation and execution.

errasr6_short6.f:

      integer*8,parameter :: ip=576460752303423487_8
      integer,parameter ::  b(ip)=1
       print * ,b
      end
$ flang-new errasr6_short6.f
LLVM ERROR: out of memory
Allocation failed
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /work01/ohno/LLVM_20230706/release/bin/flang-new -fc1 -triple aarch64-unknown-linux-gnu -emit-obj -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu generic -target-feature +neon -target-feature +v8a -o /tmp/errasr6_short6-20879d.o -x f95-cpp-input errasr6_short6.f
 #0 0x0000000003b5d218 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x3b5d218)
 #1 0x0000000003b5b328 llvm::sys::RunSignalHandlers() (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x3b5b328)
 #2 0x0000000003b5b4ac SignalHandler(int) Signals.cpp:0:0
 #3 0x000040001b8207a0 (linux-vdso.so.1+0x7a0)
 #4 0x000040001bd12bec raise (/lib64/libc.so.6+0x32bec)
 #5 0x000040001bd0096c abort (/lib64/libc.so.6+0x2096c)
 #6 0x0000000003aeb028 out_of_memory_new_handler() ErrorHandling.cpp:0:0
 #7 0x0000000003aeb040 LLVMInstallFatalErrorHandler (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x3aeb040)
 #8 0x000040001bab1498 operator new(unsigned long) (/lib64/libstdc++.so.6+0x91498)
 #9 0x000000000489b5fc Fortran::evaluate::ConstantBase<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>, Fortran::evaluate::value::Integer<32, true, 32, unsigned int, unsigned long>>::Reshape(std::vector<long, std::allocator<long>> const&) const (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x489b5f\
c)
#10 0x00000000048a0288 Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>::Reshape(std::vector<long, std::allocator<long>>&&) const (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x48a0288)
#11 0x0000000004865494 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>> (*)(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>> Fortran::evaluate::ScalarConstantE\
xpander::Expand<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>&&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>&&)&&, std::variant<Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(For\
tran::common::TypeCategory)0, 4>>, Fortran::evaluate::Negate<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Add<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Subtract<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evalua\
te::Multiply<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Divide<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Power<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Extremum<Fortran::evaluate::Type<(Fortran::c\
ommon::TypeCategory)0, 4>>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>, (Fortran::common::TypeCategory)0>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>, (Fortran::common::TypeCategory)1>, Fortran::evaluate::Constant<Fortran::eva\
luate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::\
TypeCategory)0, 4>>>&&)>, std::tuple<std::variant<Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Negate<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Add<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>\
>, Fortran::evaluate::Subtract<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Multiply<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Divide<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Power<Fortran::evaluate\
::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Extremum<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>, (Fortran::common::TypeCategory)0>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(For\
tran::common::TypeCategory)0, 4>, (Fortran::common::TypeCategory)1>, Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fo\
rtran::common::TypeCategory)0, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>>&&>, std::integer_sequence<unsigned long, 10ul>>::__visit_invoke(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>> Fortran::evaluate::ScalarConstantExp\
ander::Expand<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>&&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>&&)&&, std::variant<Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortr\
an::common::TypeCategory)0, 4>>, Fortran::evaluate::Negate<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Add<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Subtract<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate\
::Multiply<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Divide<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Power<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Extremum<Fortran::evaluate::Type<(Fortran::com\
mon::TypeCategory)0, 4>>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>, (Fortran::common::TypeCategory)0>, Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>, (Fortran::common::TypeCategory)1>, Fortran::evaluate::Constant<Fortran::evalu\
ate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::Ty\
peCategory)0, 4>>>&&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x4865494)
#12 0x0000000004837a2c std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>> (*)(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>> Fortran::evaluate::ScalarConstan\
tExpander::Expand<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>>&&)::'lambda'(Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>&&)&&, std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortr\
an::common::TypeCategory)0, 1>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, Fortran::evaluate::Exp\
r<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 16>>>&&)>, std::tuple<std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 1>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type\
<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 16>>>&&>, std::integer_sequence<unsigned long, 2ul>>::__visit_invoke(Fortran::evaluate::Expr<Fortran::evalu\
ate::SomeKind<(Fortran::common::TypeCategory)0>> Fortran::evaluate::ScalarConstantExpander::Expand<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>>&&)::'lambda'(Fortran::evaluate::SomeKind<(Fortran::common::TypeCate\
gory)0>&&)&&, std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 1>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 4>>, Fortran::evaluate::Expr<Fort\
ran::evaluate::Type<(Fortran::common::TypeCategory)0, 8>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)0, 16>>>&&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x4837a2c)
#13 0x000000000482cb3c 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::Ex\
pr<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::evaluat\
e::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>>, Fort\
ran::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, Fort\
ran::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::T\
ypeCategory)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, 4ul>>::__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>>>&&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x482cb3c)
#14 0x000000000486d598 Fortran::evaluate::NonPointerInitializationExpr(Fortran::semantics::Symbol const&, Fortran::evaluate::Expr<Fortran::evaluate::SomeType>&&, Fortran::evaluate::FoldingContext&, Fortran::semantics::Scope const*) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x486d598)
#15 0x00000000045c8b88 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::commo\
n::Indirection<Fortran::parser::Expr, false>> const&, Fortran::parser::CharBlock) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x45c8b88)
#16 0x00000000045c8db8 Fortran::semantics::DeclarationVisitor::NonPointerInitialization(Fortran::parser::Name const&, Fortran::parser::Constant<Fortran::common::Indirection<Fortran::parser::Expr, false>> const&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x45c8db8)
#17 0x0000000004595e54 Fortran::semantics::DeclarationVisitor::Initialization(Fortran::parser::Name const&, Fortran::parser::Initialization const&, bool) (.constprop.37479) resolve-names.cpp:0:0
#18 0x00000000045d06e0 Fortran::semantics::DeclarationVisitor::Post(Fortran::parser::EntityDecl const&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x45d06e0)
#19 0x00000000045d08a4 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(void Fortran::parser::Walk<Fortran::semantics::ResolveNamesVisitor, 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::Indirectio\
n<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>, Fortr\
an::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::ResolveNamesVisitor&)::'lambda'(Fortran::semantics::ResolveNamesVisitor 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>, Fortra\
n::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::OpenMPDeclarativeConst\
ruct, 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<Fortra\
n::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::Struct\
ureDef, 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_i\
nvoke(void Fortran::parser::Walk<Fortran::semantics::ResolveNamesVisitor, 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::commo\
n::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<Fo\
rtran::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::Indirecti\
on<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::ResolveNamesVisitor&)::'lambda'(Fortran::semantics::ResolveNamesVisitor const&)&&, std::variant<Fortran::common::Indirection<Fortran::parser::DerivedTypeDef, false>, Fortran::common::Indirection<Fortran::parser::EnumDef, false>, Fortran::parser::State\
ment<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::Old\
ParameterStmt, 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::com\
mon::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&) (/work01/ohno/\
LLVM_20230706/release/bin/flang-new+0x45d08a4)
#20 0x0000000004593114 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(void Fortran::parser::Walk<Fortran::semantics::ResolveNamesVisitor, 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::ErrorRecover\
y>(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::ResolveNamesVisitor&)::'lambda'(Fortran::semantics::ResolveNamesVisitor 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::Indirecti\
on<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::ResolveNamesVisitor, Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::FormatStmt, false>>, For\
tran::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::comm\
on::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::Stmt\
FunctionStmt, false>>, Fortran::parser::ErrorRecovery> const&, Fortran::semantics::ResolveNamesVisitor&)::'lambda'(Fortran::semantics::ResolveNamesVisitor const&)&&, std::variant<Fortran::parser::SpecificationConstruct, Fortran::parser::Statement<Fortran::common::Indirection<Fortran::parser::DataStmt, false>>, Fort\
ran::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> c\
onst&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x4593114)
#21 0x00000000045d393c Fortran::semantics::ResolveNamesVisitor::Pre(Fortran::parser::SpecificationPart const&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x45d393c)
#22 0x00000000045d4b14 Fortran::semantics::ResolveNamesVisitor::ResolveSpecificationParts(Fortran::semantics::ProgramTree&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x45d4b14)
#23 0x00000000045d8720 Fortran::semantics::ResolveNamesVisitor::Pre(Fortran::parser::ProgramUnit const&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x45d8720)
#24 0x00000000045d92d0 Fortran::semantics::ResolveNames(Fortran::semantics::SemanticsContext&, Fortran::parser::Program const&, Fortran::semantics::Scope&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x45d92d0)
#25 0x00000000046140b0 Fortran::semantics::Semantics::Perform() (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x46140b0)
#26 0x0000000003b8c8e4 Fortran::frontend::FrontendAction::runSemanticChecks() (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x3b8c8e4)
#27 0x0000000004172870 Fortran::frontend::CodeGenAction::beginSourceFileAction() (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x4172870)
#28 0x0000000003b8bf30 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x3b8bf30)
#29 0x0000000003b80750 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x3b80750)
#30 0x0000000003b9058c Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x3b9058c)
#31 0x00000000037f8570 fc1_main(llvm::ArrayRef<char const*>, char const*) (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x37f8570)
#32 0x0000000003788cb8 main (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x3788cb8)
#33 0x000040001bd00de4 __libc_start_main (/lib64/libc.so.6+0x20de4)
#34 0x00000000037f5ea4 _start (/work01/ohno/LLVM_20230706/release/bin/flang-new+0x37f5ea4)
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 17.0.0 (https://github.com/llvm/llvm-project.git 3ff080b53b0a7f5bccfabd11254e255669892a67)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /work01/ohno/LLVM_20230706/release/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/errasr6_short6-6e3450
flang-new: note: diagnostic msg: /tmp/errasr6_short6-6e3450.sh
flang-new: note: diagnostic msg:

********************
$
$ cat /tmp/errasr6_short6-6e3450
#line "./errasr6_short6.f" 1
      integer*8,parameter :: ip=576460752303423487_8
      integer,parameter ::  b(ip)=1
       print * ,b
      end
$
$ cat /tmp/errasr6_short6-6e3450.sh
# Crash reproducer for clang version 17.0.0 (https://github.com/llvm/llvm-project.git 3ff080b53b0a7f5bccfabd11254e255669892a67)
# Driver args: "errasr6_short6.f"
# Original command:  "/work01/ohno/LLVM_20230706/release/bin/flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "generic" "-target-feature" "+neon" "-target-feature" "+v8a" "-o" "/tmp/errasr6_short6-20879d.o" "-x" "f95-cpp-inpu\
t" "errasr6_short6.f"
 "/work01/ohno/LLVM_20230706/release/bin/flang-new" "-fc1" "-triple" "aarch64-unknown-linux-gnu" "-emit-obj" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-target-cpu" "generic" "-target-feature" "+neon" "-target-feature" "+v8a" "-x" "f95-cpp-input" "errasr6_short6-6e3450"
$
$ gfortran errasr6_short6.f
/tmp/ccdQ2K5r.s: Assembler messages:
/tmp/ccdQ2K5r.s: Fatal error: can't fill 256 bytes in section .rodata of /tmp/ccG1MOKr.o: 'No space left on device'
$
$ ifort errasr6_short6.f
errasr6_short6.f(2): error #5524: Variable B is larger than 2147483647 bytes and cannot be initialized
      integer,parameter ::  b(ip)=1
----------------------------^
compilation aborted for errasr6_short6.f (code 1)
$
llvmbot commented 1 year ago

@llvm/issue-subscribers-flang-frontend

klausler commented 1 year ago

The compiler ran out of memory and told you so. I don't know what else you want.

ohno-fj commented 1 year ago

Thank you for your comment.

This test program is for error checking. Flang-new ended abnormally, but I thought it would output a message (like "The compiler ran out of memory") and abort the compilation. I understand that the current Flang-new terminates abnormally when it runs out of memory.

luporl commented 1 year ago

For some reason I see a different error on my machine:

flang-new i63771_orig.f90
flang-new: error: unable to execute command: Killed
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 17.0.0 (git@github.com:luporl/llvm-project.git 979fb95021c81024c7684e0572b6899cf5a28445)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/leandro.lupori/git/flang-luporl/buildr/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/i63771_orig-f1bb75
flang-new: note: diagnostic msg: /tmp/i63771_orig-f1bb75.sh
flang-new: note: diagnostic msg:

********************

It's hard to handle out of memory errors gracefully, especially when the program just receives a signal from the OOM killer.

I guess that when flang is able to detect that it ran out of memory, as reported in this issue, it would be possible to just print an error and abort compilation. However, changing this behavior would likely affect clang and the other LLVM tools, which would require a lot of discussion.

In the case of ifort, it simply imposes an array size limit. But with a modified version of the test program it just gets killed:

integer*8, parameter :: ip = 2147483647_8 / 4
integer :: i
integer, parameter :: a(ip) = [(i, i=1, ip)]
    print *, a
end
$ ifort -c i63771.f90
ifort: error #10106: Fatal error in /opt/intel/oneapi/compiler/2023.2.0/mac/bin/intel64/../../bin/intel64/fortcom, terminated by kill signal
compilation aborted for i63771.f90 (code 1)

The same happens with gfortran, if the array constructor upper limit is increased:

$ gfortran -fmax-array-constructor=2147483647 -c i63771.f90
gfortran: fatal error: Killed: 9 signal terminated program f951
compilation terminated.

But both ifort and gfortran are able to handle the initialization of the whole array to 1 without running out of memory, so maybe this can be improved in flang. Another option would be to limit the maximum array size and provide a flag to increase it, similar to what gfortran does for array constructors.

luporl commented 11 months ago

I tried to reproduce this issue again, but the result was the same as before:

flang-new: error: unable to execute command: Killed
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 18.0.0 (git@github.com:luporl/llvm-project.git 0aa620c66ada92cdfd0d7d0560936aaa92abca4f)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/leandro.lupori/git/flang-luporl/buildr/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/ftest_orig-a28d06
flang-new: note: diagnostic msg: /tmp/ftest_orig-a28d06.sh
flang-new: note: diagnostic msg:

********************

flang-new just gets killed by the OS and reports it. As it doesn't know why it was killed, it's not possible for it to print a message like "The compiler ran out of memory" and abort execution.

Note that ifort simply imposed a 2GB limit on the array size, which doesn't look like a good option to incorporate into flang.

With gfortran, despite avoiding running out of memory in the compilation phase with this test program, it fails in a way similar to that of flang with a slightly modified test, as was shown in the comment above.

Therefore, I'm closing this issue as invalid.