[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