[flang-commits] [flang] [flang] Fix spurious error with separate module procedures (PR #106768)
Rainer Orth via flang-commits
flang-commits at lists.llvm.org
Wed Sep 11 11:26:41 PDT 2024
rorth wrote:
On Solaris/sparcv9, the new `Semantics/smp-proc-ref.f90` testcase causes `flang-new` to `SEGV`:
```
RUN: at line 1: bin/flang-new -fc1 -fsyntax-only flang/test/Semantics/smp-proc-ref.f90
+ bin/flang-new -fc1 -fsyntax-only flang/test/Semantics/smp-proc-ref.f90
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: bin/flang-new -fc1 -fsyntax-only flang/test/Semantics/smp-proc-ref.f90
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0 flang-new 0x00000001078e6bb8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 36
1 flang-new 0x00000001078e74bc SignalHandler(int) + 896
2 libc.so.1 0x00007fffff0c6398 __sighndlr + 12
3 libc.so.1 0x00007fffff0b8c40 call_user_handler + 1024
4 libc.so.1 0x00007fffff0b9000 sigacthandler + 160
5 libc.so.1 0x00007ffffefd652c memcmp + 164
6 flang-new 0x0000000108368380 Fortran::semantics::Scope::FindSymbol(Fortran::parser::CharBlock const&) const + 48
7 flang-new 0x00000001082de780 Fortran::semantics::ScopeHandler::FindSymbol(Fortran::semantics::Scope const&, Fortran::parser::Name const&) + 276
8 flang-new 0x00000001082eb010 Fortran::semantics::ScopeHandler::FindSeparateModuleProcedureInterface(Fortran::parser::Name const&) + 36
9 flang-new 0x00000001082eb230 Fortran::semantics::SubprogramVisitor::BeginMpSubprogram(Fortran::parser::Name const&) + 36
10 flang-new 0x000000010830ce64 Fortran::semantics::ResolveNamesVisitor::BeginScopeForNode(Fortran::semantics::ProgramTree const&) + 348
11 flang-new 0x000000010830b840 Fortran::semantics::ResolveNamesVisitor::ResolveSpecificationParts(Fortran::semantics::ProgramTree&) + 48
12 flang-new 0x000000010830dd70 Fortran::semantics::ResolveSpecificationParts(Fortran::semantics::SemanticsContext&, Fortran::semantics::Symbol const&) + 192
13 flang-new 0x000000010822f680 Fortran::evaluate::ExpressionAnalyzer::ResolveForward(Fortran::semantics::Symbol const&) + 232
14 flang-new 0x0000000108230330 Fortran::evaluate::ExpressionAnalyzer::GetCalleeAndArguments(Fortran::parser::Name const&, std::vector<std::optional<Fortran::evaluate::ActualArgument>, std::allocator<std::optional<Fortran::evaluate::ActualArgument>>>&&, bool, bool) + 52
15 flang-new 0x0000000108231948 Fortran::evaluate::ExpressionAnalyzer::Analyze(Fortran::parser::FunctionReference const&, std::optional<Fortran::parser::StructureConstructor>*) + 348
16 flang-new 0x000000010823a894 std::optional<Fortran::evaluate::Expr<Fortran::evaluate::SomeType>> Fortran::evaluate::ExpressionAnalyzer::ExprOrVariable<Fortran::parser::Expr>(Fortran::parser::Expr const&, Fortran::parser::CharBlock) + 860
17 flang-new 0x000000010823a420 Fortran::evaluate::ExpressionAnalyzer::IterativelyAnalyzeSubexpressions(Fortran::parser::Expr const&) + 1024
18 flang-new 0x00000001082221c0 Fortran::evaluate::ExpressionAnalyzer::Analyze(Fortran::parser::Expr const&) + 132
19 flang-new 0x00000001082419b4 Fortran::evaluate::ArgumentAnalyzer::AnalyzeExprOrWholeAssumedSizeArray(Fortran::parser::Expr const&) + 684
20 flang-new 0x00000001082415a8 Fortran::evaluate::ArgumentAnalyzer::AnalyzeExpr(Fortran::parser::Expr const&) + 452
21 flang-new 0x0000000108233c5c Fortran::evaluate::ArgumentAnalyzer::Analyze(Fortran::parser::Expr const&) + 28
22 flang-new 0x0000000108233604 Fortran::evaluate::ExpressionAnalyzer::Analyze(Fortran::parser::AssignmentStmt const&) + 100
[...]
```
The `SEGV` happens for an unaligned/invalid address according to `truss`:
```
26345: Incurred fault #6, FLTBOUNDS %pc = 0x7FFFFEFD652C
26345: siginfo: SIGSEGV SEGV_MAPERR addr=0x000000E1
26345: Received signal #11, SIGSEGV [caught]
26345: siginfo: SIGSEGV SEGV_MAPERR addr=0x000000E1
```
Haven't investigated further yet. `gdb` shows
```
#0 0x00007ffffefd652c in memcmp () from /lib/64/libc.so.1
#1 0x0000000107d84ac8 in std::_Rb_tree<Fortran::parser::CharBlock, std::pair<Fortran::parser::CharBlock const, Fortran::common::Reference<Fortran::semantics::Symbol> >, std::_Select1st<std::pair<Fortran::parser::CharBlock const, Fortran::common::Reference<Fortran::semantics::Symbol> > >, std::less<Fortran::parser::CharBlock>, std::allocator<std::pair<Fortran::parser::CharBlock const, Fortran::common::Reference<Fortran::semantics::Symbol> > > >::find(Fortran::parser::CharBlock const&) const ()
#2 0x0000000108368388 in Fortran::semantics::Scope::FindSymbol(Fortran::parser::CharBlock const&) const ()
#3 0x00000001082de788 in Fortran::semantics::ScopeHandler::FindSymbol(Fortran::semantics::Scope const&, Fortran::parser::Name const&) ()
#4 0x00000001082eb018 in Fortran::semantics::ScopeHandler::FindSeparateModuleProcedureInterface(Fortran::parser::Name const&) ()
#5 0x00000001082eb238 in Fortran::semantics::SubprogramVisitor::BeginMpSubprogram(Fortran::parser::Name const&) ()
#6 0x000000010830ce6c in Fortran::semantics::ResolveNamesVisitor::BeginScopeForNode(Fortran::semantics::ProgramTree const&) ()
#7 0x000000010830b848 in Fortran::semantics::ResolveNamesVisitor::ResolveSpecificationParts(Fortran::semantics::ProgramTree&) ()
#8 0x000000010830dd78 in Fortran::semantics::ResolveSpecificationParts(Fortran::semantics::SemanticsContext&, Fortran::semantics::Symbol const&) ()
#9 0x000000010822f688 in Fortran::evaluate::ExpressionAnalyzer::ResolveForward(Fortran::semantics::Symbol const&) ()
#10 0x0000000108230338 in Fortran::evaluate::ExpressionAnalyzer::GetCalleeAndArguments(Fortran::parser::Name const&, std::vector<std::optional<Fortran::evaluate::ActualArgument>, std::allocator<std::optional<Fortran::evaluate::ActualArgument> > >&&, bool, bool) ()
#11 0x0000000108231950 in Fortran::evaluate::ExpressionAnalyzer::Analyze(Fortran::parser::FunctionReference const&, std::optional<Fortran::parser::StructureConstructor>*) ()
#12 0x000000010823a89c in std::optional<Fortran::evaluate::Expr<Fortran::evaluate::SomeType> > Fortran::evaluate::ExpressionAnalyzer::ExprOrVariable<Fortran::parser::Expr>(Fortran::parser::Expr const&, Fortran::parser::CharBlock) ()
#13 0x000000010823a428 in Fortran::evaluate::ExpressionAnalyzer::IterativelyAnalyzeSubexpressions(Fortran::parser::Expr const&) ()
#14 0x00000001082221c8 in Fortran::evaluate::ExpressionAnalyzer::Analyze(Fortran::parser::Expr const&) ()
#15 0x00000001082419bc in Fortran::evaluate::ArgumentAnalyzer::AnalyzeExprOrWholeAssumedSizeArray(Fortran::parser::Expr const&) ()
#16 0x00000001082415b0 in Fortran::evaluate::ArgumentAnalyzer::AnalyzeExpr(Fortran::parser::Expr const&) ()
#17 0x0000000108233c64 in Fortran::evaluate::ArgumentAnalyzer::Analyze(Fortran::parser::Expr const&) ()
#18 0x000000010823360c in Fortran::evaluate::ExpressionAnalyzer::Analyze(Fortran::parser::AssignmentStmt const&) ()
[...]
```
but that's not particularly useful in a `Release` build.
https://github.com/llvm/llvm-project/pull/106768
More information about the flang-commits
mailing list