[flang-commits] [flang] [flang][OpenMP] Parse strictly- and loosely-structured blocks (PR #150298)
Leandro Lupori via flang-commits
flang-commits at lists.llvm.org
Fri Jul 25 06:02:03 PDT 2025
luporl wrote:
This caused a regression in Fujitsu testsuite, test 0981_0034.f90. Flang doesn't finish the compilation, even after more than 4 hours. With this PR reverted (and the commit that fixes a warning) the compilation finishes in a few seconds.
Below is a stacktrace of the process after ~1 minute running:
```
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /home/leandro.lupori/git/flang/install/bin/flang -fc1 -triple aarch64-unknown-linux-gnu -emit-llvm-bc -I /home/leandro.lupori/git/llvm-test-suite/Fujitsu/Fortran/0981 -D NDEBUG -ffixed-line-length=72 -flto=full -mrelocation-model pic -pic-level 2 -pic-is-pie -ffast-math -target-cpu generic -target-feature +outline-atomics -target-feature +v8.4a -target-feature +ccidx -target-feature +complxnum -target-feature +crc -target-feature +dit -target-feature +dotprod -target-feature +flagm -target-feature +fp-armv8 -target-feature +fp16fml -target-feature +fullfp16 -target-feature +jsconv -target-feature +lse -target-feature +neon -target-feature +pauth -target-feature +ras -target-feature +rcpc -target-feature +rdm -target-feature +sve -mvscale-max=2 -mvscale-min=2 -floop-interchange -vectorize-loops -vectorize-slp -fversion-loops-for-stride -module-dir Fujitsu/Fortran/0981/Fujitsu-Fortran-0981_0034.d -fopenmp -resource-dir /home/leandro.lupori/git/flang/install/lib/clang/22 -mframe-pointer=non-leaf -mllvm -treat-scalable-fixed-error-as-warning=false -O3 -o 0981_0034.f90.o Fortran/0981/0981_0034.f90
#0 0x0000aaaade6fec24 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/leandro.lupori/git/flang/install/bin/flang+0x3b66c24)
#1 0x0000aaaade6fc5b4 llvm::sys::RunSignalHandlers() (/home/leandro.lupori/git/flang/install/bin/flang+0x3b645b4)
#2 0x0000aaaade6ffa34 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x0000ffff8bf2d598 (linux-vdso.so.1+0x598)
#4 0x0000aaaadeee8868 Fortran::common::CountedReference<Fortran::parser::Message>::Drop() Clauses.cpp:0:0
#5 0x0000aaaae01d093c void Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::AlternativesParser<Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Absent, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpAbsentClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Acquire>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::AcqRel>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::AdjustArgs, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpAdjustArgsClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Affinity, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpAffinityClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Align, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpAlignClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Aligned, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpAlignedClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Allocate, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpAllocateClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::AppendArgs, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpAppendArgsClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Allocator, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::ApplyConstructor<Fortran::parser::Scalar<Fortran::parser::Integer<Fortran::common::Indirection<Fortran::parser::Expr, false>>>, Fortran::parser::ApplyConstructor<Fortran::parser::Integer<Fortran::common::Indirection<Fortran::parser::Expr, false>>, Fortran::parser::ApplyConstructor<Fortran::common::Indirection<Fortran::parser::Expr, false>, Fortran::parser::Parser<Fortran::parser::Expr>>>>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::At, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpAtClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::AtomicDefaultMemOrder, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpAtomicDefaultMemOrderClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Bind, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpBindClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Capture>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Collapse, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::ApplyConstructor<Fortran::parser::Scalar<Fortran::parser::Integer<Fortran::parser::Constant<Fortran::common::Indirection<Fortran::parser::Expr, false>>>>, Fortran::parser::ApplyConstructor<Fortran::parser::Integer<Fortran::parser::Constant<Fortran::common::Indirection<Fortran::parser::Expr, false>>>, Fortran::parser::ApplyConstructor<Fortran::parser::Constant<Fortran::common::Indirection<Fortran::parser::Expr, false>>, Fortran::parser::ApplyConstructor<Fortran::common::Indirection<Fortran::parser::Expr, false>, Fortran::parser::Parser<Fortran::parser::Expr>>>>>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Compare>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Contains, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpContainsClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Copyin, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpObjectList>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Copyprivate, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpObjectList>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, true>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Default, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpDefaultClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Defaultmap, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpDefaultmapClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Depend, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpDependClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Destroy, Fortran::parser::MaybeParser<Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::ApplyConstructor<Fortran::parser::OmpDestroyClause, Fortran::parser::Parser<Fortran::parser::OmpObject>>, Fortran::parser::TokenStringMatch<false, false>>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Device, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpDeviceClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::DeviceType, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpDeviceTypeClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::DistSchedule, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::MaybeParser<Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::Scalar<Fortran::parser::Integer<Fortran::common::Indirection<Fortran::parser::Expr, false>>>, Fortran::parser::ApplyConstructor<Fortran::parser::Integer<Fortran::common::Indirection<Fortran::parser::Expr, false>>, Fortran::parser::ApplyConstructor<Fortran::common::Indirection<Fortran::parser::Expr, false>, Fortran::parser::Parser<Fortran::parser::Expr>>>>>>>, Fortran::parser::TokenStringMatch<false, false>>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpDoacrossClause>, Fortran::parser::TokenStringMatch<false, false>>>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::DynamicAllocators>>>>, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause, Fortran::parser::ApplyConstructor<Fortran::parser::OmpClause::Enter, Fortran::parser::SequenceParser<Fortran::parser::TokenStringMatch<false, false>, Fortran::parser::FollowParser<Fortran::parser::Parser<Fortran::parser::OmpObjectList>, Fortran::parser::TokenStringMatch<false, false>>>>>>>::ParseRest<1>(std::optional<Fortran::parser::OmpClause>&, Fortran::parser::ParseState&, Fortran::parser::ParseState&) const openmp-parsers.cpp:0:0
...
#3077 0x0000aaaac7a70760 in Fortran::parser::Parsing::Parse(llvm::raw_ostream&) ()
#3078 0x0000aaaac61fb8dc in Fortran::frontend::FrontendAction::runParse(bool) ()
#3079 0x0000aaaac6201204 in Fortran::frontend::CodeGenAction::beginSourceFileAction() ()
#3080 0x0000aaaac61fb0a4 in Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) ()
#3081 0x0000aaaac61e313c in Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) ()
#3082 0x0000aaaac61ff68c in Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) ()
#3083 0x0000aaaac5d16684 in fc1_main(llvm::ArrayRef<char const*>, char const*) ()
#3084 0x0000aaaac5d15780 in main ()
```
Frames 0-5 are from killing the process with SIGABRT, but it stops on frame 255. Frames 3077-3084 are from attaching gdb in another run.
https://github.com/llvm/llvm-project/pull/150298
More information about the flang-commits
mailing list