Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Flang] ICE on atand(x, y) #78568

Closed
k-arrows opened this issue Jan 18, 2024 · 10 comments · Fixed by #79002
Closed

[Flang] ICE on atand(x, y) #78568

k-arrows opened this issue Jan 18, 2024 · 10 comments · Fixed by #79002
Assignees
Labels
bug Indicates an unexpected problem or unintended behavior crash Prefer [crash-on-valid] or [crash-on-invalid] flang:ir

Comments

@k-arrows
Copy link

Reproducer (use command line flang-new atand.f90)

$ cat atand.f90
program p
   real x, y
   x = 1.
   y = x
   print *, atand(x, y)
end

Assertion failure:

flang-new: /tmp/llvm-project/flang/lib/Optimizer/Builder/IntrinsicCall.cpp:2124: mlir::Value fir::IntrinsicLibrary::genAtand(mlir::Type, llvm::ArrayRef<mlir::Value>): Assertion `args.size() == 1' failed.

Stack dump:

 #0 0x000055e0852b1e2f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) 
 #1 0x000055e0852b24b0 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f53036af520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x00007f5303703a7c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #4 0x00007f5303703a7c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #5 0x00007f5303703a7c pthread_kill ./nptl/pthread_kill.c:89:10
 #6 0x00007f53036af476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #7 0x00007f53036957f3 abort ./stdlib/abort.c:81:7
 #8 0x00007f530369571b _nl_load_domain ./intl/loadmsgcat.c:1177:9
 #9 0x00007f53036a6e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#10 0x000055e086374b7d fir::IntrinsicLibrary::genAtand(mlir::Type, llvm::ArrayRef<mlir::Value>)
#11 0x000055e086392ff4 fir::ExtendedValue fir::IntrinsicLibrary::genElementalCall<mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef<mlir::Value>)>(mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef<mlir::Value>), llvm::StringRef, mlir::Type, llvm::ArrayRef<fir::ExtendedValue>, bool) 
#12 0x000055e086392ea2 fir::invokeHandler(mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef<mlir::Value>), fir::IntrinsicHandler const&, std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>, bool, fir::IntrinsicLibrary&) IntrinsicCall.cpp:0:0
#13 0x000055e086392d7c std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<std::__detail::__variant::__deduce_visit_result<fir::ExtendedValue> (*)(fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>)::$_1&&, 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>)> const&)>, std::integer_sequence<unsigned long, 0ul>>::__visit_invoke(fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>)::$_1&&, 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>)> const&) IntrinsicCall.cpp:0:0
#14 0x000055e0863723ce fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>) 
#15 0x000055e08638c596 fir::genIntrinsicCall(fir::FirOpBuilder&, mlir::Location, llvm::StringRef, std::optional<mlir::Type>, llvm::ArrayRef<fir::ExtendedValue>, Fortran::lower::AbstractConverter*) 
#16 0x000055e0857d42c9 genIntrinsicRefCore(llvm::SmallVector<std::optional<Fortran::lower::PreparedActualArgument>, 1u>&, Fortran::evaluate::SpecificIntrinsic const*, fir::IntrinsicArgumentLoweringRules const*, (anonymous namespace)::CallContext&) ConvertCall.cpp:0:0
#17 0x000055e0857d1284 genHLFIRIntrinsicRefCore(llvm::SmallVector<std::optional<Fortran::lower::PreparedActualArgument>, 1u>&, Fortran::evaluate::SpecificIntrinsic const*, fir::IntrinsicArgumentLoweringRules const*, (anonymous namespace)::CallContext&) ConvertCall.cpp:0:0
#18 0x000055e0857d02c8 genIntrinsicRef(Fortran::evaluate::SpecificIntrinsic const*, (anonymous namespace)::CallContext&) ConvertCall.cpp:0:0
#19 0x000055e0857cc428 Fortran::lower::convertCallToHLFIR(mlir::Location, Fortran::lower::AbstractConverter&, Fortran::evaluate::ProcedureRef const&, std::optional<mlir::Type>, Fortran::lower::SymMap&, Fortran::lower::StatementContext&) 
#20 0x000055e085914c70 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<std::__detail::__variant::__deduce_visit_result<hlfir::EntityWithAttributes> (*)(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>> const&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4> const&)&&, 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>>> const&)>, std::integer_sequence<unsigned long, 15ul>>::__visit_invoke(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>> const&)::'lambda'(Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4> const&)&&, 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>>> const&) ConvertExprToHLFIR.cpp:0:0
#21 0x000055e085912d8b hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>>(Fortran::evaluate::Expr<Fortran::evaluate::Type<(Fortran::common::TypeCategory)1, 4>> const&) ConvertExprToHLFIR.cpp:0:0
#22 0x000055e085904af7 hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>>(Fortran::evaluate::Expr<Fortran::evaluate::SomeKind<(Fortran::common::TypeCategory)1>> const&) ConvertExprToHLFIR.cpp:0:0
#23 0x000055e0858fb2e8 hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen<Fortran::evaluate::SomeType>(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&) ConvertExprToHLFIR.cpp:0:0
#24 0x000055e0858fb7fd Fortran::lower::convertExprToValue(mlir::Location, Fortran::lower::AbstractConverter&, Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&, Fortran::lower::SymMap&, Fortran::lower::StatementContext&) 
#25 0x000055e08576acdb (anonymous namespace)::FirConverter::genExprValue(Fortran::evaluate::Expr<Fortran::evaluate::SomeType> const&, Fortran::lower::StatementContext&, mlir::Location*) Bridge.cpp:0:0
#26 0x000055e0859802cc 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
#27 0x000055e08597d063 Fortran::lower::genPrintStatement(Fortran::lower::AbstractConverter&, Fortran::parser::PrintStmt const&) 
#28 0x000055e085786fe5 (anonymous namespace)::FirConverter::genFIR(Fortran::lower::pft::Evaluation&, bool) Bridge.cpp:0:0
#29 0x000055e0857b9db7 (anonymous namespace)::FirConverter::lowerFunc(Fortran::lower::pft::FunctionLikeUnit&) Bridge.cpp:0:0
#30 0x000055e0857690b3 Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&, Fortran::semantics::SemanticsContext const&) 
#31 0x000055e0856ceba3 Fortran::frontend::CodeGenAction::beginSourceFileAction() 
#32 0x000055e0852d47ef Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) 
#33 0x000055e0852c98b9 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&)
#34 0x000055e0852d7a3e Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*)
#35 0x000055e084f9243d fc1_main(llvm::ArrayRef<char const*>, char const*)
#36 0x000055e084f91426 main 
#37 0x00007f5303696d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#38 0x00007f5303696e40 call_init ./csu/../csu/libc-start.c:128:20
#39 0x00007f5303696e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#40 0x000055e084f90985 _start 
flang-new: error: unable to execute command: Aborted
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 18.0.0git (https://github.com/llvm/llvm-project.git 651a42ff65c3afc2a2ec6c7fc19009387757d686)
Target: x86_64-unknown-linux-gnu
@github-actions github-actions bot added the flang Flang issues not falling into any other category label Jan 18, 2024
@EugeneZelenko EugeneZelenko added flang:ir crash Prefer [crash-on-valid] or [crash-on-invalid] and removed flang Flang issues not falling into any other category labels Jan 18, 2024
@llvmbot
Copy link
Collaborator

llvmbot commented Jan 18, 2024

@llvm/issue-subscribers-flang-ir

Author: None (k-arrows)

Reproducer (use command line `flang-new atand.f90`) ```console $ cat atand.f90 program p real x, y x = 1. y = x print *, atand(x, y) end ```

Assertion failure:

flang-new: /tmp/llvm-project/flang/lib/Optimizer/Builder/IntrinsicCall.cpp:2124: mlir::Value fir::IntrinsicLibrary::genAtand(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;): Assertion `args.size() == 1' failed.

Stack dump:

 #<!-- -->0 0x000055e0852b1e2f llvm::sys::PrintStackTrace(llvm::raw_ostream&amp;, int) 
 #<!-- -->1 0x000055e0852b24b0 SignalHandler(int) Signals.cpp:0:0
 #<!-- -->2 0x00007f53036af520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #<!-- -->3 0x00007f5303703a7c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #<!-- -->4 0x00007f5303703a7c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #<!-- -->5 0x00007f5303703a7c pthread_kill ./nptl/pthread_kill.c:89:10
 #<!-- -->6 0x00007f53036af476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #<!-- -->7 0x00007f53036957f3 abort ./stdlib/abort.c:81:7
 #<!-- -->8 0x00007f530369571b _nl_load_domain ./intl/loadmsgcat.c:1177:9
 #<!-- -->9 0x00007f53036a6e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#<!-- -->10 0x000055e086374b7d fir::IntrinsicLibrary::genAtand(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;)
#<!-- -->11 0x000055e086392ff4 fir::ExtendedValue fir::IntrinsicLibrary::genElementalCall&lt;mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;)&gt;(mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;), llvm::StringRef, mlir::Type, llvm::ArrayRef&lt;fir::ExtendedValue&gt;, bool) 
#<!-- -->12 0x000055e086392ea2 fir::invokeHandler(mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;), fir::IntrinsicHandler const&amp;, std::optional&lt;mlir::Type&gt;, llvm::ArrayRef&lt;fir::ExtendedValue&gt;, bool, fir::IntrinsicLibrary&amp;) IntrinsicCall.cpp:0:0
#<!-- -->13 0x000055e086392d7c std::__detail::__variant::__gen_vtable_impl&lt;std::__detail::__variant::_Multi_array&lt;std::__detail::__variant::__deduce_visit_result&lt;fir::ExtendedValue&gt; (*)(fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional&lt;mlir::Type&gt;, llvm::ArrayRef&lt;fir::ExtendedValue&gt;)::$_1&amp;&amp;, std::variant&lt;mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;), fir::ExtendedValue (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;fir::ExtendedValue&gt;), void (fir::IntrinsicLibrary::*)(llvm::ArrayRef&lt;fir::ExtendedValue&gt;)&gt; const&amp;)&gt;, std::integer_sequence&lt;unsigned long, 0ul&gt;&gt;::__visit_invoke(fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional&lt;mlir::Type&gt;, llvm::ArrayRef&lt;fir::ExtendedValue&gt;)::$_1&amp;&amp;, std::variant&lt;mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;), fir::ExtendedValue (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;fir::ExtendedValue&gt;), void (fir::IntrinsicLibrary::*)(llvm::ArrayRef&lt;fir::ExtendedValue&gt;)&gt; const&amp;) IntrinsicCall.cpp:0:0
#<!-- -->14 0x000055e0863723ce fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional&lt;mlir::Type&gt;, llvm::ArrayRef&lt;fir::ExtendedValue&gt;) 
#<!-- -->15 0x000055e08638c596 fir::genIntrinsicCall(fir::FirOpBuilder&amp;, mlir::Location, llvm::StringRef, std::optional&lt;mlir::Type&gt;, llvm::ArrayRef&lt;fir::ExtendedValue&gt;, Fortran::lower::AbstractConverter*) 
#<!-- -->16 0x000055e0857d42c9 genIntrinsicRefCore(llvm::SmallVector&lt;std::optional&lt;Fortran::lower::PreparedActualArgument&gt;, 1u&gt;&amp;, Fortran::evaluate::SpecificIntrinsic const*, fir::IntrinsicArgumentLoweringRules const*, (anonymous namespace)::CallContext&amp;) ConvertCall.cpp:0:0
#<!-- -->17 0x000055e0857d1284 genHLFIRIntrinsicRefCore(llvm::SmallVector&lt;std::optional&lt;Fortran::lower::PreparedActualArgument&gt;, 1u&gt;&amp;, Fortran::evaluate::SpecificIntrinsic const*, fir::IntrinsicArgumentLoweringRules const*, (anonymous namespace)::CallContext&amp;) ConvertCall.cpp:0:0
#<!-- -->18 0x000055e0857d02c8 genIntrinsicRef(Fortran::evaluate::SpecificIntrinsic const*, (anonymous namespace)::CallContext&amp;) ConvertCall.cpp:0:0
#<!-- -->19 0x000055e0857cc428 Fortran::lower::convertCallToHLFIR(mlir::Location, Fortran::lower::AbstractConverter&amp;, Fortran::evaluate::ProcedureRef const&amp;, std::optional&lt;mlir::Type&gt;, Fortran::lower::SymMap&amp;, Fortran::lower::StatementContext&amp;) 
#<!-- -->20 0x000055e085914c70 std::__detail::__variant::__gen_vtable_impl&lt;std::__detail::__variant::_Multi_array&lt;std::__detail::__variant::__deduce_visit_result&lt;hlfir::EntityWithAttributes&gt; (*)(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;(Fortran::evaluate::Expr&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt; const&amp;)::'lambda'(Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt; const&amp;)&amp;&amp;, std::variant&lt;Fortran::evaluate::ComplexComponent&lt;4&gt;, Fortran::evaluate::Parentheses&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Negate&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Add&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Subtract&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Multiply&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Divide&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Power&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::RealToIntPower&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Extremum&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Convert&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;, (Fortran::common::TypeCategory)0&gt;, Fortran::evaluate::Convert&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;, (Fortran::common::TypeCategory)1&gt;, Fortran::evaluate::Constant&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::ArrayConstructor&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Designator&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::FunctionRef&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;&gt; const&amp;)&gt;, std::integer_sequence&lt;unsigned long, 15ul&gt;&gt;::__visit_invoke(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;(Fortran::evaluate::Expr&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt; const&amp;)::'lambda'(Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt; const&amp;)&amp;&amp;, std::variant&lt;Fortran::evaluate::ComplexComponent&lt;4&gt;, Fortran::evaluate::Parentheses&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Negate&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Add&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Subtract&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Multiply&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Divide&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Power&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::RealToIntPower&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Extremum&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Convert&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;, (Fortran::common::TypeCategory)0&gt;, Fortran::evaluate::Convert&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;, (Fortran::common::TypeCategory)1&gt;, Fortran::evaluate::Constant&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::ArrayConstructor&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Designator&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::FunctionRef&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;&gt; const&amp;) ConvertExprToHLFIR.cpp:0:0
#<!-- -->21 0x000055e085912d8b hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;(Fortran::evaluate::Expr&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt; const&amp;) ConvertExprToHLFIR.cpp:0:0
#<!-- -->22 0x000055e085904af7 hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen&lt;Fortran::evaluate::SomeKind&lt;(Fortran::common::TypeCategory)1&gt;&gt;(Fortran::evaluate::Expr&lt;Fortran::evaluate::SomeKind&lt;(Fortran::common::TypeCategory)1&gt;&gt; const&amp;) ConvertExprToHLFIR.cpp:0:0
#<!-- -->23 0x000055e0858fb2e8 hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen&lt;Fortran::evaluate::SomeType&gt;(Fortran::evaluate::Expr&lt;Fortran::evaluate::SomeType&gt; const&amp;) ConvertExprToHLFIR.cpp:0:0
#<!-- -->24 0x000055e0858fb7fd Fortran::lower::convertExprToValue(mlir::Location, Fortran::lower::AbstractConverter&amp;, Fortran::evaluate::Expr&lt;Fortran::evaluate::SomeType&gt; const&amp;, Fortran::lower::SymMap&amp;, Fortran::lower::StatementContext&amp;) 
#<!-- -->25 0x000055e08576acdb (anonymous namespace)::FirConverter::genExprValue(Fortran::evaluate::Expr&lt;Fortran::evaluate::SomeType&gt; const&amp;, Fortran::lower::StatementContext&amp;, mlir::Location*) Bridge.cpp:0:0
#<!-- -->26 0x000055e0859802cc genOutputItemList(Fortran::lower::AbstractConverter&amp;, mlir::Value, std::__cxx11::list&lt;Fortran::parser::OutputItem, std::allocator&lt;Fortran::parser::OutputItem&gt;&gt; const&amp;, bool, bool, mlir::Value&amp;, bool) IO.cpp:0:0
#<!-- -->27 0x000055e08597d063 Fortran::lower::genPrintStatement(Fortran::lower::AbstractConverter&amp;, Fortran::parser::PrintStmt const&amp;) 
#<!-- -->28 0x000055e085786fe5 (anonymous namespace)::FirConverter::genFIR(Fortran::lower::pft::Evaluation&amp;, bool) Bridge.cpp:0:0
#<!-- -->29 0x000055e0857b9db7 (anonymous namespace)::FirConverter::lowerFunc(Fortran::lower::pft::FunctionLikeUnit&amp;) Bridge.cpp:0:0
#<!-- -->30 0x000055e0857690b3 Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&amp;, Fortran::semantics::SemanticsContext const&amp;) 
#<!-- -->31 0x000055e0856ceba3 Fortran::frontend::CodeGenAction::beginSourceFileAction() 
#<!-- -->32 0x000055e0852d47ef Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&amp;, Fortran::frontend::FrontendInputFile const&amp;) 
#<!-- -->33 0x000055e0852c98b9 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&amp;)
#<!-- -->34 0x000055e0852d7a3e Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*)
#<!-- -->35 0x000055e084f9243d fc1_main(llvm::ArrayRef&lt;char const*&gt;, char const*)
#<!-- -->36 0x000055e084f91426 main 
#<!-- -->37 0x00007f5303696d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#<!-- -->38 0x00007f5303696e40 call_init ./csu/../csu/libc-start.c:128:20
#<!-- -->39 0x00007f5303696e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#<!-- -->40 0x000055e084f90985 _start 
flang-new: error: unable to execute command: Aborted
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 18.0.0git (https://github.com/llvm/llvm-project.git 651a42ff65c3afc2a2ec6c7fc19009387757d686)
Target: x86_64-unknown-linux-gnu

@psteinfeld psteinfeld added the bug Indicates an unexpected problem or unintended behavior label Jan 18, 2024
@llvmbot
Copy link
Collaborator

llvmbot commented Jan 18, 2024

@llvm/issue-subscribers-bug

Author: None (k-arrows)

Reproducer (use command line `flang-new atand.f90`) ```console $ cat atand.f90 program p real x, y x = 1. y = x print *, atand(x, y) end ```

Assertion failure:

flang-new: /tmp/llvm-project/flang/lib/Optimizer/Builder/IntrinsicCall.cpp:2124: mlir::Value fir::IntrinsicLibrary::genAtand(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;): Assertion `args.size() == 1' failed.

Stack dump:

 #<!-- -->0 0x000055e0852b1e2f llvm::sys::PrintStackTrace(llvm::raw_ostream&amp;, int) 
 #<!-- -->1 0x000055e0852b24b0 SignalHandler(int) Signals.cpp:0:0
 #<!-- -->2 0x00007f53036af520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #<!-- -->3 0x00007f5303703a7c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #<!-- -->4 0x00007f5303703a7c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #<!-- -->5 0x00007f5303703a7c pthread_kill ./nptl/pthread_kill.c:89:10
 #<!-- -->6 0x00007f53036af476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #<!-- -->7 0x00007f53036957f3 abort ./stdlib/abort.c:81:7
 #<!-- -->8 0x00007f530369571b _nl_load_domain ./intl/loadmsgcat.c:1177:9
 #<!-- -->9 0x00007f53036a6e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#<!-- -->10 0x000055e086374b7d fir::IntrinsicLibrary::genAtand(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;)
#<!-- -->11 0x000055e086392ff4 fir::ExtendedValue fir::IntrinsicLibrary::genElementalCall&lt;mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;)&gt;(mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;), llvm::StringRef, mlir::Type, llvm::ArrayRef&lt;fir::ExtendedValue&gt;, bool) 
#<!-- -->12 0x000055e086392ea2 fir::invokeHandler(mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;), fir::IntrinsicHandler const&amp;, std::optional&lt;mlir::Type&gt;, llvm::ArrayRef&lt;fir::ExtendedValue&gt;, bool, fir::IntrinsicLibrary&amp;) IntrinsicCall.cpp:0:0
#<!-- -->13 0x000055e086392d7c std::__detail::__variant::__gen_vtable_impl&lt;std::__detail::__variant::_Multi_array&lt;std::__detail::__variant::__deduce_visit_result&lt;fir::ExtendedValue&gt; (*)(fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional&lt;mlir::Type&gt;, llvm::ArrayRef&lt;fir::ExtendedValue&gt;)::$_1&amp;&amp;, std::variant&lt;mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;), fir::ExtendedValue (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;fir::ExtendedValue&gt;), void (fir::IntrinsicLibrary::*)(llvm::ArrayRef&lt;fir::ExtendedValue&gt;)&gt; const&amp;)&gt;, std::integer_sequence&lt;unsigned long, 0ul&gt;&gt;::__visit_invoke(fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional&lt;mlir::Type&gt;, llvm::ArrayRef&lt;fir::ExtendedValue&gt;)::$_1&amp;&amp;, std::variant&lt;mlir::Value (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;mlir::Value&gt;), fir::ExtendedValue (fir::IntrinsicLibrary::*)(mlir::Type, llvm::ArrayRef&lt;fir::ExtendedValue&gt;), void (fir::IntrinsicLibrary::*)(llvm::ArrayRef&lt;fir::ExtendedValue&gt;)&gt; const&amp;) IntrinsicCall.cpp:0:0
#<!-- -->14 0x000055e0863723ce fir::IntrinsicLibrary::genIntrinsicCall(llvm::StringRef, std::optional&lt;mlir::Type&gt;, llvm::ArrayRef&lt;fir::ExtendedValue&gt;) 
#<!-- -->15 0x000055e08638c596 fir::genIntrinsicCall(fir::FirOpBuilder&amp;, mlir::Location, llvm::StringRef, std::optional&lt;mlir::Type&gt;, llvm::ArrayRef&lt;fir::ExtendedValue&gt;, Fortran::lower::AbstractConverter*) 
#<!-- -->16 0x000055e0857d42c9 genIntrinsicRefCore(llvm::SmallVector&lt;std::optional&lt;Fortran::lower::PreparedActualArgument&gt;, 1u&gt;&amp;, Fortran::evaluate::SpecificIntrinsic const*, fir::IntrinsicArgumentLoweringRules const*, (anonymous namespace)::CallContext&amp;) ConvertCall.cpp:0:0
#<!-- -->17 0x000055e0857d1284 genHLFIRIntrinsicRefCore(llvm::SmallVector&lt;std::optional&lt;Fortran::lower::PreparedActualArgument&gt;, 1u&gt;&amp;, Fortran::evaluate::SpecificIntrinsic const*, fir::IntrinsicArgumentLoweringRules const*, (anonymous namespace)::CallContext&amp;) ConvertCall.cpp:0:0
#<!-- -->18 0x000055e0857d02c8 genIntrinsicRef(Fortran::evaluate::SpecificIntrinsic const*, (anonymous namespace)::CallContext&amp;) ConvertCall.cpp:0:0
#<!-- -->19 0x000055e0857cc428 Fortran::lower::convertCallToHLFIR(mlir::Location, Fortran::lower::AbstractConverter&amp;, Fortran::evaluate::ProcedureRef const&amp;, std::optional&lt;mlir::Type&gt;, Fortran::lower::SymMap&amp;, Fortran::lower::StatementContext&amp;) 
#<!-- -->20 0x000055e085914c70 std::__detail::__variant::__gen_vtable_impl&lt;std::__detail::__variant::_Multi_array&lt;std::__detail::__variant::__deduce_visit_result&lt;hlfir::EntityWithAttributes&gt; (*)(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;(Fortran::evaluate::Expr&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt; const&amp;)::'lambda'(Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt; const&amp;)&amp;&amp;, std::variant&lt;Fortran::evaluate::ComplexComponent&lt;4&gt;, Fortran::evaluate::Parentheses&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Negate&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Add&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Subtract&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Multiply&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Divide&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Power&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::RealToIntPower&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Extremum&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Convert&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;, (Fortran::common::TypeCategory)0&gt;, Fortran::evaluate::Convert&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;, (Fortran::common::TypeCategory)1&gt;, Fortran::evaluate::Constant&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::ArrayConstructor&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Designator&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::FunctionRef&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;&gt; const&amp;)&gt;, std::integer_sequence&lt;unsigned long, 15ul&gt;&gt;::__visit_invoke(hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;(Fortran::evaluate::Expr&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt; const&amp;)::'lambda'(Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt; const&amp;)&amp;&amp;, std::variant&lt;Fortran::evaluate::ComplexComponent&lt;4&gt;, Fortran::evaluate::Parentheses&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Negate&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Add&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Subtract&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Multiply&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Divide&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Power&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::RealToIntPower&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Extremum&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Convert&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;, (Fortran::common::TypeCategory)0&gt;, Fortran::evaluate::Convert&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;, (Fortran::common::TypeCategory)1&gt;, Fortran::evaluate::Constant&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::ArrayConstructor&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::Designator&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;, Fortran::evaluate::FunctionRef&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;&gt; const&amp;) ConvertExprToHLFIR.cpp:0:0
#<!-- -->21 0x000055e085912d8b hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt;(Fortran::evaluate::Expr&lt;Fortran::evaluate::Type&lt;(Fortran::common::TypeCategory)1, 4&gt;&gt; const&amp;) ConvertExprToHLFIR.cpp:0:0
#<!-- -->22 0x000055e085904af7 hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen&lt;Fortran::evaluate::SomeKind&lt;(Fortran::common::TypeCategory)1&gt;&gt;(Fortran::evaluate::Expr&lt;Fortran::evaluate::SomeKind&lt;(Fortran::common::TypeCategory)1&gt;&gt; const&amp;) ConvertExprToHLFIR.cpp:0:0
#<!-- -->23 0x000055e0858fb2e8 hlfir::EntityWithAttributes (anonymous namespace)::HlfirBuilder::gen&lt;Fortran::evaluate::SomeType&gt;(Fortran::evaluate::Expr&lt;Fortran::evaluate::SomeType&gt; const&amp;) ConvertExprToHLFIR.cpp:0:0
#<!-- -->24 0x000055e0858fb7fd Fortran::lower::convertExprToValue(mlir::Location, Fortran::lower::AbstractConverter&amp;, Fortran::evaluate::Expr&lt;Fortran::evaluate::SomeType&gt; const&amp;, Fortran::lower::SymMap&amp;, Fortran::lower::StatementContext&amp;) 
#<!-- -->25 0x000055e08576acdb (anonymous namespace)::FirConverter::genExprValue(Fortran::evaluate::Expr&lt;Fortran::evaluate::SomeType&gt; const&amp;, Fortran::lower::StatementContext&amp;, mlir::Location*) Bridge.cpp:0:0
#<!-- -->26 0x000055e0859802cc genOutputItemList(Fortran::lower::AbstractConverter&amp;, mlir::Value, std::__cxx11::list&lt;Fortran::parser::OutputItem, std::allocator&lt;Fortran::parser::OutputItem&gt;&gt; const&amp;, bool, bool, mlir::Value&amp;, bool) IO.cpp:0:0
#<!-- -->27 0x000055e08597d063 Fortran::lower::genPrintStatement(Fortran::lower::AbstractConverter&amp;, Fortran::parser::PrintStmt const&amp;) 
#<!-- -->28 0x000055e085786fe5 (anonymous namespace)::FirConverter::genFIR(Fortran::lower::pft::Evaluation&amp;, bool) Bridge.cpp:0:0
#<!-- -->29 0x000055e0857b9db7 (anonymous namespace)::FirConverter::lowerFunc(Fortran::lower::pft::FunctionLikeUnit&amp;) Bridge.cpp:0:0
#<!-- -->30 0x000055e0857690b3 Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&amp;, Fortran::semantics::SemanticsContext const&amp;) 
#<!-- -->31 0x000055e0856ceba3 Fortran::frontend::CodeGenAction::beginSourceFileAction() 
#<!-- -->32 0x000055e0852d47ef Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&amp;, Fortran::frontend::FrontendInputFile const&amp;) 
#<!-- -->33 0x000055e0852c98b9 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&amp;)
#<!-- -->34 0x000055e0852d7a3e Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*)
#<!-- -->35 0x000055e084f9243d fc1_main(llvm::ArrayRef&lt;char const*&gt;, char const*)
#<!-- -->36 0x000055e084f91426 main 
#<!-- -->37 0x00007f5303696d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#<!-- -->38 0x00007f5303696e40 call_init ./csu/../csu/libc-start.c:128:20
#<!-- -->39 0x00007f5303696e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#<!-- -->40 0x000055e084f90985 _start 
flang-new: error: unable to execute command: Aborted
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 18.0.0git (https://github.com/llvm/llvm-project.git 651a42ff65c3afc2a2ec6c7fc19009387757d686)
Target: x86_64-unknown-linux-gnu

@kargl
Copy link

kargl commented Jan 18, 2024

Reproducer (use command line flang-new atand.f90)

$ cat atand.f90
program p
   real x, y
   x = 1.
   y = x
   print *, atand(x, y)
end

It seems that you found this here.

@k-arrows
Copy link
Author

Reproducer (use command line flang-new atand.f90)

$ cat atand.f90
program p
   real x, y
   x = 1.
   y = x
   print *, atand(x, y)
end

It seems that you found this here.

Thank you for pointing that out. I should have written down the source.

@k-arrows
Copy link
Author

It seems that atand was introduced to flang in D144885.

@kiranchandramohan
Copy link
Contributor

@yi-wu-arm Could you have a look when you get some time.

@yi-wu-arm
Copy link
Contributor

yi-wu-arm commented Jan 19, 2024

This is because

mlir::Value IntrinsicLibrary::genAtand(mlir::Type resultType,
is expecting one argument, following the syntax in fortran atand(X), while the intrinsics table have both two
https://github.com/llvm/llvm-project/blob/2c78f3b86007fbf56a6f40b647b5cb757c082215/flang/lib/Evaluate/intrinsics.cpp#L335C1-L338C70

Working on providing a fix for this.

@yi-wu-arm
Copy link
Contributor

Documented on https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gfortran/ATAND.html :

ATAND(X) computes the arctangent of X in degrees (inverse of TAND).
The return value is of the same type and kind as X. If Y is present, the result is identical to ATAND2(Y,X). Otherwise, it is the >arcus tangent of X, where the real part of the result is in degrees and lies in the range -90 \leq \Re \atand(x) \leq 90.

But I couldn't find the doc for ATAND2(Y,X), there is a ATAN2D(X,Y) here https://gcc.gnu.org/onlinedocs/gfortran/ATAN2D.html, is that a typo?

@kargl
Copy link

kargl commented Jan 19, 2024

But I couldn't find the doc for ATAND2(Y,X), there is a ATAN2D(X,Y) here https://gcc.gnu.org/onlinedocs/gfortran/ATAN2D.html, is that a typo?

gfortran's documentation is correct.

@yi-wu-arm
Copy link
Contributor

yi-wu-arm commented Jan 19, 2024

The working draft standard 2023:

16.9.25 ATAND (X) or ATAND (Y, X)
1 Description. Arc tangent function in degrees.
2 Class. Elemental function.
3 Arguments.
   Y shall be of type real.
   X If Y appears, X shall be of type real with the same kind type parameter as Y. If Y has the value
   zero, X shall not have the value zero. If Y does not appear, X shall be of type real.
4 Result Characteristics. Same as X.
5 Result Value. If Y appears, the result is the same as the result of ATAN2D (Y, X). If Y does not appear,
   the result has a value equal to a processor-dependent approximation to the arc tangent of X; it is expressed in
   degrees and lies in the range −90 ≤ ATAND (X) ≤ 90.
6 Example. ATAND (1.0) has the value 45.0 (approximately).

https://j3-fortran.org/doc/year/24/24-007.pdf
I will fix atand(y,x) based on this, and provide support of atan2d(y,x) based on the standard.

yi-wu-arm added a commit that referenced this issue Feb 5, 2024
…pi(Y,X), atan2pi(Y,X) (#79002)

Fix: #78568

---------

Co-authored-by: jeanPerier <jean.perier.polytechnique@gmail.com>
agozillon pushed a commit to agozillon/llvm-project that referenced this issue Feb 5, 2024
…pi(Y,X), atan2pi(Y,X) (llvm#79002)

Fix: llvm#78568

---------

Co-authored-by: jeanPerier <jean.perier.polytechnique@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Indicates an unexpected problem or unintended behavior crash Prefer [crash-on-valid] or [crash-on-invalid] flang:ir
Projects
None yet
7 participants