Issue 121973
Summary [flang] fatal internal error: CHECK(!start.IsTopLevel()) failed at /root/llvm-project/flang/lib/Semantics/tools.cpp(61)
Labels flang
Assignees
Reporter yype
    Hi there, flang crashes from an assertion failure on the following test case:

```fortran
subroutine s()
  real(8) :: a
  complex(128) :: x
 a(i)=a + ((i)+1) + 3.14
  a()=z(a * a + n-1 - x) + i((/0,0,0,0,0,0,0,0,0,0/)) + 8
end
```

Tested version(s): 19.1.0, trunk.

Example: https://godbolt.org/z/Eq43jTaoh

Possibly related: https://github.com/llvm/llvm-project/issues/91429

Stack dump:

<details>
<summary>Click me</summary>

```

fatal internal error: CHECK(!start.IsTopLevel()) failed at /root/llvm-project/flang/lib/Semantics/tools.cpp(61)
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-20250107/bin/flang -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-20250107/lib/clang/20 -mframe-pointer=all -o /app/output.s -x f95-cpp-input /app/example.f90
 #0 0x00000000039ffa18 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x39ffa18)
 #1 0x00000000039fd5dc SignalHandler(int) Signals.cpp:0:0
 #2 0x000077d132c42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x000077d132c969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x000077d132c42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x000077d132c287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x00000000053ed959 (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x53ed959)
 #7 0x000000000454b158 (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x454b158)
 #8 0x0000000004456db1 Fortran::semantics::DeclarationVisitor::IsUplevelReference(Fortran::semantics::Symbol const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x4456db1)
 #9 0x0000000004486586 Fortran::semantics::DeclarationVisitor::ResolveName(Fortran::parser::Name const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x4486586)
#10 0x0000000004486f29 Fortran::semantics::ResolveNamesVisitor::HandleProcedureName(Fortran::semantics::Symbol::Flag, Fortran::parser::Name const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x4486f29)
#11 0x000000000448a78c Fortran::semantics::ResolveNamesVisitor::HandleCall(Fortran::semantics::Symbol::Flag, Fortran::parser::Call const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x448a78c)
#12 0x000000000447f324 void Fortran::common::log2visit::Log2VisitHelper<0ul, 7ul, void, void Fortran::parser::detail::ParseTreeVisitorLookupScope::Walk<Fortran::semantics::ResolveNamesVisitor, Fortran::common::Indirection<Fortran::parser::CharLiteralConstantSubstring, false>, Fortran::parser::LiteralConstant, Fortran::common::Indirection<Fortran::parser::Designator, false>, Fortran::parser::ArrayConstructor, Fortran::parser::StructureConstructor, Fortran::common::Indirection<Fortran::parser::FunctionReference, false>, Fortran::parser::Expr::Parentheses, Fortran::parser::Expr::UnaryPlus, Fortran::parser::Expr::Negate, Fortran::parser::Expr::NOT, Fortran::parser::Expr::PercentLoc, Fortran::parser::Expr::DefinedUnary, Fortran::parser::Expr::Power, Fortran::parser::Expr::Multiply, Fortran::parser::Expr::Divide, Fortran::parser::Expr::Add, Fortran::parser::Expr::Subtract, Fortran::parser::Expr::Concat, Fortran::parser::Expr::LT, Fortran::parser::Expr::LE, Fortran::parser::Expr::EQ, Fortran::parser::Expr::NE, Fortran::parser::Expr::GE, Fortran::parser::Expr::GT, Fortran::parser::Expr::AND, Fortran::parser::Expr::OR, Fortran::parser::Expr::EQV, Fortran::parser::Expr::NEQV, Fortran::parser::Expr::DefinedBinary, Fortran::parser::Expr::ComplexConstructor, Fortran::common::Indirection<Fortran::parser::SubstringInquiry, false>>(std::variant<Fortran::common::Indirection<Fortran::parser::CharLiteralConstantSubstring, false>, Fortran::parser::LiteralConstant, Fortran::common::Indirection<Fortran::parser::Designator, false>, Fortran::parser::ArrayConstructor, Fortran::parser::StructureConstructor, Fortran::common::Indirection<Fortran::parser::FunctionReference, false>, Fortran::parser::Expr::Parentheses, Fortran::parser::Expr::UnaryPlus, Fortran::parser::Expr::Negate, Fortran::parser::Expr::NOT, Fortran::parser::Expr::PercentLoc, Fortran::parser::Expr::DefinedUnary, Fortran::parser::Expr::Power, Fortran::parser::Expr::Multiply, Fortran::parser::Expr::Divide, Fortran::parser::Expr::Add, Fortran::parser::Expr::Subtract, Fortran::parser::Expr::Concat, Fortran::parser::Expr::LT, Fortran::parser::Expr::LE, Fortran::parser::Expr::EQ, Fortran::parser::Expr::NE, Fortran::parser::Expr::GE, Fortran::parser::Expr::GT, Fortran::parser::Expr::AND, Fortran::parser::Expr::OR, Fortran::parser::Expr::EQV, Fortran::parser::Expr::NEQV, Fortran::parser::Expr::DefinedBinary, Fortran::parser::Expr::ComplexConstructor, Fortran::common::Indirection<Fortran::parser::SubstringInquiry, false>> const&, Fortran::semantics::ResolveNamesVisitor&)::'lambda'(Fortran::semantics::ResolveNamesVisitor const&), std::variant<Fortran::common::Indirection<Fortran::parser::CharLiteralConstantSubstring, false>, Fortran::parser::LiteralConstant, Fortran::common::Indirection<Fortran::parser::Designator, false>, Fortran::parser::ArrayConstructor, Fortran::parser::StructureConstructor, Fortran::common::Indirection<Fortran::parser::FunctionReference, false>, Fortran::parser::Expr::Parentheses, Fortran::parser::Expr::UnaryPlus, Fortran::parser::Expr::Negate, Fortran::parser::Expr::NOT, Fortran::parser::Expr::PercentLoc, Fortran::parser::Expr::DefinedUnary, Fortran::parser::Expr::Power, Fortran::parser::Expr::Multiply, Fortran::parser::Expr::Divide, Fortran::parser::Expr::Add, Fortran::parser::Expr::Subtract, Fortran::parser::Expr::Concat, Fortran::parser::Expr::LT, Fortran::parser::Expr::LE, Fortran::parser::Expr::EQ, Fortran::parser::Expr::NE, Fortran::parser::Expr::GE, Fortran::parser::Expr::GT, Fortran::parser::Expr::AND, Fortran::parser::Expr::OR, Fortran::parser::Expr::EQV, Fortran::parser::Expr::NEQV, Fortran::parser::Expr::DefinedBinary, Fortran::parser::Expr::ComplexConstructor, Fortran::common::Indirection<Fortran::parser::SubstringInquiry, false>> const&>(void Fortran::parser::detail::ParseTreeVisitorLookupScope::Walk<Fortran::semantics::ResolveNamesVisitor, Fortran::common::Indirection<Fortran::parser::CharLiteralConstantSubstring, false>, Fortran::parser::LiteralConstant, Fortran::common::Indirection<Fortran::parser::Designator, false>, Fortran::parser::ArrayConstructor, Fortran::parser::StructureConstructor, Fortran::common::Indirection<Fortran::parser::FunctionReference, false>, Fortran::parser::Expr::Parentheses, Fortran::parser::Expr::UnaryPlus, Fortran::parser::Expr::Negate, Fortran::parser::Expr::NOT, Fortran::parser::Expr::PercentLoc, Fortran::parser::Expr::DefinedUnary, Fortran::parser::Expr::Power, Fortran::parser::Expr::Multiply, Fortran::parser::Expr::Divide, Fortran::parser::Expr::Add, Fortran::parser::Expr::Subtract, Fortran::parser::Expr::Concat, Fortran::parser::Expr::LT, Fortran::parser::Expr::LE, Fortran::parser::Expr::EQ, Fortran::parser::Expr::NE, Fortran::parser::Expr::GE, Fortran::parser::Expr::GT, Fortran::parser::Expr::AND, Fortran::parser::Expr::OR, Fortran::parser::Expr::EQV, Fortran::parser::Expr::NEQV, Fortran::parser::Expr::DefinedBinary, Fortran::parser::Expr::ComplexConstructor, Fortran::common::Indirection<Fortran::parser::SubstringInquiry, false>>(std::variant<Fortran::common::Indirection<Fortran::parser::CharLiteralConstantSubstring, false>, Fortran::parser::LiteralConstant, Fortran::common::Indirection<Fortran::parser::Designator, false>, Fortran::parser::ArrayConstructor, Fortran::parser::StructureConstructor, Fortran::common::Indirection<Fortran::parser::FunctionReference, false>, Fortran::parser::Expr::Parentheses, Fortran::parser::Expr::UnaryPlus, Fortran::parser::Expr::Negate, Fortran::parser::Expr::NOT, Fortran::parser::Expr::PercentLoc, Fortran::parser::Expr::DefinedUnary, Fortran::parser::Expr::Power, Fortran::parser::Expr::Multiply, Fortran::parser::Expr::Divide, Fortran::parser::Expr::Add, Fortran::parser::Expr::Subtract, Fortran::parser::Expr::Concat, Fortran::parser::Expr::LT, Fortran::parser::Expr::LE, Fortran::parser::Expr::EQ, Fortran::parser::Expr::NE, Fortran::parser::Expr::GE, Fortran::parser::Expr::GT, Fortran::parser::Expr::AND, Fortran::parser::Expr::OR, Fortran::parser::Expr::EQV, Fortran::parser::Expr::NEQV, Fortran::parser::Expr::DefinedBinary, Fortran::parser::Expr::ComplexConstructor, Fortran::common::Indirection<Fortran::parser::SubstringInquiry, false>> const&, Fortran::semantics::ResolveNamesVisitor&)::'lambda'(Fortran::semantics::ResolveNamesVisitor const&)&&, unsigned long, std::variant<Fortran::common::Indirection<Fortran::parser::CharLiteralConstantSubstring, false>, Fortran::parser::LiteralConstant, Fortran::common::Indirection<Fortran::parser::Designator, false>, Fortran::parser::ArrayConstructor, Fortran::parser::StructureConstructor, Fortran::common::Indirection<Fortran::parser::FunctionReference, false>, Fortran::parser::Expr::Parentheses, Fortran::parser::Expr::UnaryPlus, Fortran::parser::Expr::Negate, Fortran::parser::Expr::NOT, Fortran::parser::Expr::PercentLoc, Fortran::parser::Expr::DefinedUnary, Fortran::parser::Expr::Power, Fortran::parser::Expr::Multiply, Fortran::parser::Expr::Divide, Fortran::parser::Expr::Add, Fortran::parser::Expr::Subtract, Fortran::parser::Expr::Concat, Fortran::parser::Expr::LT, Fortran::parser::Expr::LE, Fortran::parser::Expr::EQ, Fortran::parser::Expr::NE, Fortran::parser::Expr::GE, Fortran::parser::Expr::GT, Fortran::parser::Expr::AND, Fortran::parser::Expr::OR, Fortran::parser::Expr::EQV, Fortran::parser::Expr::NEQV, Fortran::parser::Expr::DefinedBinary, Fortran::parser::Expr::ComplexConstructor, Fortran::common::Indirection<Fortran::parser::SubstringInquiry, false>> const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x447f324)
#13 0x000000000447f5f5 void Fortran::parser::detail::ParseTreeVisitorLookupScope::IterativeWalk<Fortran::parser::Expr const, Fortran::semantics::ResolveNamesVisitor, Fortran::parser::Expr::IntrinsicUnary const, Fortran::parser::Expr::IntrinsicBinary const>(Fortran::parser::Expr const&, Fortran::semantics::ResolveNamesVisitor&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x447f5f5)
#14 0x0000000004485970 Fortran::semantics::ResolveNamesVisitor::AnalyzeStmtFunctionStmt(Fortran::parser::StmtFunctionStmt const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x4485970)
#15 0x000000000448b36d Fortran::semantics::ResolveNamesVisitor::FinishSpecificationPart(std::__cxx11::list<Fortran::parser::DeclarationConstruct, std::allocator<Fortran::parser::DeclarationConstruct>> const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x448b36d)
#16 0x000000000449ada8 Fortran::semantics::ResolveNamesVisitor::Pre(Fortran::parser::SpecificationPart const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x449ada8)
#17 0x00000000044da207 Fortran::semantics::ResolveNamesVisitor::ResolveSpecificationParts(Fortran::semantics::ProgramTree&) (.part.0) resolve-names.cpp:0:0
#18 0x00000000044da9b1 Fortran::semantics::ResolveNamesVisitor::Pre(Fortran::parser::ProgramUnit const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x44da9b1)
#19 0x00000000044dbe0c Fortran::semantics::ResolveNames(Fortran::semantics::SemanticsContext&, Fortran::parser::Program const&, Fortran::semantics::Scope&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x44dbe0c)
#20 0x0000000004541f4e Fortran::semantics::Semantics::Perform() (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x4541f4e)
#21 0x0000000003a537bd Fortran::frontend::FrontendAction::runSemanticChecks() (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x3a537bd)
#22 0x0000000003de1932 Fortran::frontend::CodeGenAction::beginSourceFileAction() (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x3de1932)
#23 0x0000000003a51f8d Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x3a51f8d)
#24 0x0000000003a42c27 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x3a42c27)
#25 0x0000000003a59c03 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x3a59c03)
#26 0x0000000001f7cd27 fc1_main(llvm::ArrayRef<char const*>, char const*) (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x1f7cd27)
#27 0x0000000001e5068e main (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x1e5068e)
#28 0x000077d132c29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#29 0x000077d132c29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#30 0x0000000001f7b795 _start (/opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin/flang+0x1f7b795)
flang-20: error: unable to execute command: Aborted (core dumped)
flang-20: error: flang frontend command failed due to signal (use -v to see invocation)
flang version 20.0.0git (https://github.com/llvm/llvm-project.git 97097958fdf525e8c14fcdde94231bae72ea2673)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/compiler-explorer/clang-llvmflang-trunk-20250107/bin
flang-20: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
flang-20: note: diagnostic msg: /tmp/example-5fa48c
flang-20: note: diagnostic msg: /tmp/example-5fa48c.sh
flang-20: note: diagnostic msg: 

********************
Compiler returned: 254
```
</details>

The test case was generated by a fuzzer.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to