llvm / llvm/llvm-project

[flang] nullptr dereference at flang/lib/Evaluate/fold-logical.cpp `-fdefault-integer-8`

Open
#212,392 3 comments 0 reactions 0 assignees View on GitHub
crash flang:frontend generated by fuzzer
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

The following code:

```fortran
#define T1(XT,XK,MT,MK) \
block; \
print *, #XT, XK, #MT, MK, out_of_range(x,mold); \
end block
#define INTMOLDS(M,XT,XK) \
M(XT,XK,integer,1); \

#define INTXS(M1,M2) \
M1(M2, integer, 16)
#define REALXS(M1,M2) \
INTXS(INTMOLDS, T1)
REALXS(REALMOLDS, T1)
end
```

Resulted in this output:
```
fatal internal error: nullptr dereference at flang/lib/Evaluate/fold-logical.cpp(433)
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0. Program arguments: /usr/lib/llvm-22/bin/flang -fc1 -triple x86_64-pc-linux-gnu -fsyntax-only -ffree-form -fdefault-integer-8 -fno-automatic -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu x86-64 -std=f2018 -resource-dir /usr/lib/llvm-22/lib/clang/22 -mframe-pointer=all -O0 -x f95 /tmp/test.f90
#0 0x00007fd41993fd5f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-22/lib/libLLVM.so.22.1+0x4dc7d5f)
#1 0x00007fd41993d5d7 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-22/lib/libLLVM.so.22.1+0x4dc55d7)
#2 0x00007fd419940b2a (/usr/lib/llvm-22/lib/libLLVM.so.22.1+0x4dc8b2a)
#3 0x00007fd414614330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#4 0x00007fd41466db2c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x9eb2c)
#5 0x00007fd41461427e raise (/lib/x86_64-linux-gnu/libc.so.6+0x4527e)
#6 0x00007fd4145f78ff abort (/lib/x86_64-linux-gnu/libc.so.6+0x288ff)
#7 0x000055afc991161c (/usr/lib/llvm-22/bin/flang+0x2b2061c)
#8 0x000055afc9167cec (/usr/lib/llvm-22/bin/flang+0x2376cec)
#9 0x000055afc91e3616 (/usr/lib/llvm-22/bin/flang+0x23f2616)
#10 0x000055afc91dea95 Fortran::evaluate::Expr> Fortran::evaluate::FoldIntrinsicFunction<8>(Fortran::evaluate::FoldingContext&, Fortran::evaluate::FunctionRef>&&) (/usr/lib/llvm-22/bin/flang+0x23eda95)
#11 0x000055afc91d8617 Fortran::evaluate::Expr> Fortran::evaluate::FoldOperation>(Fortran::evaluate::FoldingContext&, Fortran::evaluate::FunctionRef>&&) (/usr/lib/llvm-22/bin/flang+0x23e7617)
#12 0x000055afc91d2b0b (/usr/lib/llvm-22/bin/flang+0x23e1b0b)
#13 0x000055afc91ee79b (/usr/lib/llvm-22/bin/flang+0x23fd79b)
#14 0x000055afc9128666 Fortran::evaluate::ExpressionBase>::Rewrite(Fortran::evaluate::FoldingContext&, Fortran::evaluate::Expr>&&) (/usr/lib/llvm-22/bin/flang+0x2337666)
#15 0x000055afc8def335 (/usr/lib/llvm-22/bin/flang+0x1ffe335)
#16 0x000055afc8def0dd (/usr/lib/llvm-22/bin/flang+0x1ffe0dd)
#17 0x000055afc8ddfa56 Fortran::evaluate::ExpressionBase::Rewrite(Fortran::evaluate::FoldingContext&, Fortran::evaluate::Expr&&) (/usr/lib/llvm-22/bin/flang+0x1feea56)
#18 0x000055afc802f532 std::optional> Fortran::evaluate::ExpressionAnalyzer::ExprOrVariable(Fortran::parser::Expr const&, Fortran::parser::CharBlock) (/usr/lib/llvm-22/bin/flang+0x123e532)
#19 0x000055afc802edb5 Fortran::evaluate::ExpressionAnalyzer::IterativelyAnalyzeSubexpressions(Fortran::parser::Expr const&) (/usr/lib/llvm-22/bin/flang+0x123ddb5)
#20 0x000055afc8014f93 Fortran::evaluate::ExpressionAnalyzer::Analyze(Fortran::parser::Expr const&) (/usr/lib/llvm-22/bin/flang+0x1223f93)
#21 0x000055afc803b7c9 (/usr/lib/llvm-22/bin/flang+0x124a7c9)
#22 0x000055afc804a428 (/usr/lib/llvm-22/bin/flang+0x1259428)
#23 0x000055afc803e426 (/usr/lib/llvm-22/bin/flang+0x124d426)
#24 0x000055afc803ac7e (/usr/lib/llvm-22/bin/flang+0x1249c7e)
#25 0x000055afc803e3fa (/usr/lib/llvm-22/bin/flang+0x124d3fa)
#26 0x000055afc803ac7e (/usr/lib/llvm-22/bin/flang+0x1249c7e)
#27 0x000055afc8096ff5 (/usr/lib/llvm-22/bin/flang+0x12a5ff5)
#28 0x000055afc80383b7 Fortran::semantics::ExprChecker::Walk(Fortran::parser::Program const&) (/usr/lib/llvm-22/bin/flang+0x12473b7)
#29 0x000055afc826c051 Fortran::semantics::Semantics::Perform() (/usr/lib/llvm-22/bin/flang+0x147b051)
#30 0x000055afc79bb91e Fortran::frontend::FrontendAction::runSemanticChecks() (/usr/lib/llvm-22/bin/flang+0xbca91e)
#31 0x000055afc79c00cc Fortran::frontend::PrescanAndSemaAction::beginSourceFileAction() (/usr/lib/llvm-22/bin/flang+0xbcf0cc)
#32 0x000055afc79baf9e Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/usr/lib/llvm-22/bin/flang+0xbc9f9e)
#33 0x000055afc79a2e7f Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/usr/lib/llvm-22/bin/flang+0xbb1e7f)
#34 0x000055afc79bfba0 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/usr/lib/llvm-22/bin/flang+0xbceba0)
#35 0x000055afc79a0d34 fc1_main(llvm::ArrayRef, char const*) (/usr/lib/llvm-22/bin/flang+0xbafd34)
#36 0x000055afc799ffa4 main (/usr/lib/llvm-22/bin/flang+0xbaefa4)
#37 0x00007fd4145f91ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#38 0x00007fd4145f928b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#39 0x000055afc799ef45 _start (/usr/lib/llvm-22/bin/flang+0xbadf45)
flang-22: error: unable to execute command: Aborted (core dumped)
flang-22: error: flang frontend command failed due to signal (use -v to see invocation)
Ubuntu flang version 22.1.8 (++20260613092238+e80beda6e255-1~exp1~20260613092253.78)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-22/bin
flang-22: note: diagnostic msg:
********************

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

********************
```

To reproduce:
```
flang -fdefault-integer-8 ./test.f90
```

Compiler version:
```
Ubuntu flang version 22.1.8 (++20260613092238+e80beda6e255-1~exp1~20260613092253.78)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-22/bin
```

*This bug was found by [fusion-fuzz](https://github.com/fusion-fuzz/fusion-fuzz)*

Contributor guide

Open the contributing guide

Research direction

The crash is reported in flang/lib/Evaluate/fold-logical.cpp at line 433. Start by running flang -fdefault-integer-8 on the supplied test.f90 reproducer and inspect the folding path shown in the stack trace. Done means the reproducer no longer triggers the reported nullptr dereference.

Written by the indexing model from the issue text.

Assessment

Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.