Skip to content

[Flang] flang-new crashes with "nonscalar intrinsic argument" #93389

Closed
@k-arrows

Description

@k-arrows

Reproducible on Godbolt:
https://godbolt.org/z/jv8srsGj4

Reproducer:

use, intrinsic :: ieee_arithmetic
real x(2)
print *, ieee_support_flag(ieee_invalid, x)
end

Stack dump:

error: loc("/app/example.f90":3:10): nonscalar intrinsic argument
LLVM ERROR: aborting
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: /opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new -fc1 -triple x86_64-unknown-linux-gnu -S -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu x86-64 -mllvm -x86-asm-syntax=intel -resource-dir /opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/.. -mframe-pointer=all -o /app/output.s -x f95-cpp-input /app/example.f90
 #0 0x0000000003831598 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x3831598)
 #1 0x000000000382ef0c SignalHandler(int) Signals.cpp:0:0
 #2 0x00007d6a07442520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x00007d6a074969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x00007d6a07442476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x00007d6a074287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x0000000001e7ccc4 llvm::UniqueStringSaver::save(llvm::StringRef) (.cold) StringSaver.cpp:0:0
 #7 0x0000000003793b08 (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x3793b08)
 #8 0x0000000003c085b3 (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x3c085b3)
 #9 0x0000000004eedb31 std::__detail::__variant::__gen_vtable_impl<true, std::__detail::__variant::_Multi_array<fir::ExtendedValue (*)(fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>)::'lambda'(auto&)&&, std::variant<mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef<mlir::Value>), fir::ExtendedValue (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>), void (fir::IntrinsicLibrary::*)(llvm::ArrayRef<fir::ExtendedValue>), fir::ExtendedValue (fir::IntrinsicLibrary::*)(std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>)> const&)>, std::tuple<std::variant<mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef<mlir::Value>), fir::ExtendedValue (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>), void (fir::IntrinsicLibrary::*)(llvm::ArrayRef<fir::ExtendedValue>), fir::ExtendedValue (fir::IntrinsicLibrary::*)(std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>)> const&>, std::integer_sequence<unsigned long, 0ul>>::__visit_invoke(fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>)::'lambda'(auto&)&&, std::variant<mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef<mlir::Value>), fir::ExtendedValue (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef<fir::ExtendedValue>), void (fir::IntrinsicLibrary::*)(llvm::ArrayRef<fir::ExtendedValue>), fir::ExtendedValue (fir::IntrinsicLibrary::*)(std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>)> const&) IntrinsicCall.cpp:0:0
#10 0x0000000004ef75e2 fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>) (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x4ef75e2)
#11 0x0000000004ef7a9f fir::genIntrinsicCall(fir::FirOpBuilder&, mlir::Location, llvm::StringRef, std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>, Fortran::lower::AbstractConverter*) (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x4ef7a9f)
#12 0x0000000003c678ea genIntrinsicRefCore(llvm::SmallVector<std::optional<Fortran::lower::PreparedActualArgument>, 1u>&, Fortran::evaluate::SpecificIntrinsic const*, fir::IntrinsicArgumentLoweringRules const*, (anonymous namespace)::CallContext&) ConvertCall.cpp:0:0
#13 0x0000000003c6ad33 genIntrinsicRef(Fortran::evaluate::SpecificIntrinsic const*, (anonymous namespace)::CallContext&) ConvertCall.cpp:0:0
#14 0x0000000003c6c1e2 genProcedureRef((anonymous namespace)::CallContext&) ConvertCall.cpp:0:0
#15 0x0000000003c6d7a4 Fortran::lower::convertCallToHLFIR(mlir::Location, Fortran::lower::AbstractConverter&, Fortran::evaluate::ProcedureRef const&, std::optional<mlir::Type>, Fortran::lower::SymMap&, Fortran::lower::StatementContext&) (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x3c6d7a4)
#16 0x0000000003e0ec41 std::__detail::__variant::__gen_vtable_impl<true, std::__detail::__variant::_Multi_array<hlfir::EntityWithAttributes (*)(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>> const&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4> const&)&&, std::variant<Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>, (Fortran::common::TypeCategory)4>, Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::Not<4>, Fortran::evaluate::LogicalOperation<4>, Fortran::evaluate::Relational<Fortran::evaluate::SomeType>, Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>> const&)>, std::tuple<std::variant<Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>, (Fortran::common::TypeCategory)4>, Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::Not<4>, Fortran::evaluate::LogicalOperation<4>, Fortran::evaluate::Relational<Fortran::evaluate::SomeType>, Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>> const&>, std::integer_sequence<unsigned long, 8ul>>::__visit_invoke(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>> const&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4> const&)&&, std::variant<Fortran::evaluate::Convert<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>, (Fortran::common::TypeCategory)4>, Fortran::evaluate::Parentheses<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::Not<4>, Fortran::evaluate::LogicalOperation<4>, Fortran::evaluate::Relational<Fortran::evaluate::SomeType>, Fortran::evaluate::Constant<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::ArrayConstructor<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::Designator<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::FunctionRef<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>> const&) ConvertExprToHLFIR.cpp:0:0
#17 0x0000000003e2f4a8 hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>> const&) ConvertExprToHLFIR.cpp:0:0
#18 0x0000000003e2f4cc std::__detail::__variant::__gen_vtable_impl<true, std::__detail::__variant::_Multi_array<hlfir::EntityWithAttributes (*)(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4>> const&)::'lambda'(Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4> const&)&&, std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 1>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 8>>> const&)>, std::tuple<std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 1>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 8>>> const&>, std::integer_sequence<unsigned long, 2ul>>::__visit_invoke(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4>> const&)::'lambda'(Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4> const&)&&, std::variant<Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 1>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 2>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 4>>, Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)4, 8>>> const&) ConvertExprToHLFIR.cpp:0:0
#19 0x0000000003e2d7fb hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4>> const&) ConvertExprToHLFIR.cpp:0:0
#20 0x0000000003e2d81c std::__detail::__variant::__gen_vtable_impl<true, std::__detail::__variant::_Multi_array<hlfir::EntityWithAttributes (*)(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::SomeType>(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&)::'lambda'(Fortran::evaluate::SomeType const&)&&, std::variant<Fortran::evaluate::value::Integer<128, true, 32, unsigned int, unsigned long, 128>, Fortran::evaluate::NullPointer, Fortran::evaluate::ProcedureDesignator, Fortran::evaluate::ProcedureRef, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)2>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)3>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>> const&)>, std::tuple<std::variant<Fortran::evaluate::value::Integer<128, true, 32, unsigned int, unsigned long, 128>, Fortran::evaluate::NullPointer, Fortran::evaluate::ProcedureDesignator, Fortran::evaluate::ProcedureRef, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)2>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)3>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>> const&>, std::integer_sequence<unsigned long, 8ul>>::__visit_invoke(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::SomeType>(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&)::'lambda'(Fortran::evaluate::SomeType const&)&&, std::variant<Fortran::evaluate::value::Integer<128, true, 32, unsigned int, unsigned long, 128>, Fortran::evaluate::NullPointer, Fortran::evaluate::ProcedureDesignator, Fortran::evaluate::ProcedureRef, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)0>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)2>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)3>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)4>>, Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)5>>> const&) ConvertExprToHLFIR.cpp:0:0
#21 0x0000000003e35d5c Fortran::lower::convertExprToValue(mlir::Location, Fortran::lower::AbstractConverter&, Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&, Fortran::lower::SymMap&, Fortran::lower::StatementContext&) (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x3e35d5c)
#22 0x0000000003bd9c75 (anonymous namespace)::FirConverter::genExprValue(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&, Fortran::lower::StatementContext&, mlir::Location*) Bridge.cpp:0:0
#23 0x0000000003ec3807 genOutputItemList(Fortran::lower::AbstractConverter&, mlir::Value, std::__cxx11::list<Fortran::parser::OutputItem, std::allocator<Fortran::parser::OutputItem>> const&, bool, bool, mlir::Value&, bool) IO.cpp:0:0
#24 0x0000000003ec8446 mlir::Value genDataTransferStmt<false, false, Fortran::parser::PrintStmt>(Fortran::lower::AbstractConverter&, Fortran::parser::PrintStmt const&) IO.cpp:0:0
#25 0x0000000003c2ef4c (anonymous namespace)::FirConverter::lowerFunc(Fortran::lower::pft::FunctionLikeUnit&) Bridge.cpp:0:0
#26 0x0000000003c20c40 Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&, Fortran::semantics::SemanticsContext const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x3c20c40)
#27 0x0000000003bb4856 Fortran::frontend::CodeGenAction::beginSourceFileAction() (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x3bb4856)
#28 0x0000000003881f85 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x3881f85)
#29 0x00000000038710d7 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x38710d7)
#30 0x0000000003887f4b Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x3887f4b)
#31 0x0000000001fc0fd8 fc1_main(llvm::ArrayRef<char const*>, char const*) (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x1fc0fd8)
#32 0x0000000001eaf904 main (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x1eaf904)
#33 0x00007d6a07429d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#34 0x00007d6a07429e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#35 0x0000000001fbfe9e _start (/opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin/flang-new+0x1fbfe9e)
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 19.0.0git (https://github.com/llvm/llvm-project.git 9b31cc71d66064dfaf2afabf4a835211321bb4a0)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/compiler-explorer/clang-llvmflang-trunk-20240525/bin

Metadata

Metadata

Assignees

Labels

bugIndicates an unexpected problem or unintended behaviorcrashPrefer [crash-on-valid] or [crash-on-invalid]flang:ir

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions