[clang] [Sema] Avoid deep recursion in AnalyzeImplicitConversions (PR #145734)

David Spickett via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 26 06:06:17 PDT 2025


DavidSpickett wrote:

I also got a report of a downstream failure:
```
09:53:25  FAIL: Clang :: Sema/deep_recursion.c (18481 of 84779)
09:53:25  ******************** TEST 'Clang :: Sema/deep_recursion.c' FAILED ********************
09:53:25  Exit Code: 139
09:53:25  
09:53:25  Command Output (stderr):
09:53:25  --
09:53:25  /workspace/build/stage/bootstrap_compiler/bin/clang -cc1 -internal-isystem /workspace/build/stage/bootstrap_compiler/lib/clang/21/include -nostdsysteminc -verify -Wno-unused -I /workspace/src/clang/test/Sema/Inputs /workspace/src/clang/test/Sema/deep_recursion.c # RUN: at line 1
09:53:25  + /workspace/build/stage/bootstrap_compiler/bin/clang -cc1 -internal-isystem /workspace/build/stage/bootstrap_compiler/lib/clang/21/include -nostdsysteminc -verify -Wno-unused -I /workspace/src/clang/test/Sema/Inputs /workspace/src/clang/test/Sema/deep_recursion.c
09:53:25  PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
09:53:25  Stack dump:
09:53:25  0.	Program arguments: /workspace/build/stage/bootstrap_compiler/bin/clang -cc1 -internal-isystem /workspace/build/stage/bootstrap_compiler/lib/clang/21/include -nostdsysteminc -verify -Wno-unused -I /workspace/src/clang/test/Sema/Inputs /workspace/src/clang/test/Sema/deep_recursion.c
09:53:25  1.	/workspace/src/clang/test/Sema/deep_recursion.c:411:1: current parser token '}'
09:53:25  2.	/workspace/src/clang/test/Sema/deep_recursion.c:3:17: parsing function body 'func'
09:53:25  3.	/workspace/src/clang/test/Sema/deep_recursion.c:3:17: in compound statement ('{}')
09:53:25    #0 0x0000000001e81570 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/workspace/build/stage/bootstrap_compiler/bin/clang+0x1e81570)
09:53:25    #1 0x0000000001e7f410 llvm::sys::RunSignalHandlers() (/workspace/build/stage/bootstrap_compiler/bin/clang+0x1e7f410)
09:53:25    #2 0x0000000001e7f594 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
09:53:25    #3 0x0000e19c3b3da8f8 (linux-vdso.so.1+0x8f8)
09:53:25    #4 0x0000000003e6f0d0 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::SequenceChecker, void>::Visit(clang::Stmt const*) (.part.2496) SemaChecking.cpp:0:0
09:53:25    #5 0x0000000003e70c1c (anonymous namespace)::SequenceChecker::VisitSequencedExpressions(clang::Expr const*, clang::Expr const*) SemaChecking.cpp:0:0
09:53:25    #6 0x0000000003e6f3cc clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::SequenceChecker, void>::Visit(clang::Stmt const*) (.part.2496) SemaChecking.cpp:0:0
<...repeats...>
09:53:25   #56 0x0000000003e6f3cc clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::SequenceChecker, void>::Visit(clang::Stmt const*) (.part.2496) SemaChecking.cpp:0:0
09:53:25   #57 0x0000000003e70c1c (anonymous namespace)::SequenceChecker::VisitSequencedExpressions(clang::Expr const*, clang::Expr const*) SemaChecking.cpp:0:0
/workspace/build/stage/bootstrap_compiler/tools/clang/test/Sema/Output/deep_recursion.c.script: line 1: 144944 Segmentation fault      (core dumped) /workspace/build/stage/bootstrap_compiler/bin/clang -cc1 -internal-isystem /workspace/build/stage/bootstrap_compiler/lib/clang/21/include -nostdsysteminc -verify -Wno-unused -I /workspace/src/clang/test/Sema/Inputs /workspace/src/clang/test/Sema/deep_recursion.c
```
My first thought is that this has tried to use more stack than its allowed.

The test is running on Linaro's Linux bots without issue, where there is 8k of stack per process. However, if you add distro defaults that expand stack frame size, or padding for something like ASAN, this could be the reason.

https://github.com/llvm/llvm-project/pull/145734


More information about the cfe-commits mailing list