RFR: 8357781: Deep recursion in PhaseCFG::set_next_call leads to stack overflow
    Marc Chevalier 
    mchevalier at openjdk.org
       
    Tue May 27 07:39:37 UTC 2025
    
    
  
There is nothing very wrong here:
- the graph is not broken
- the algorithm is correct
It just happens that the graph is very deep, it has a very long, narrow chain of nodes because of crazy unrolling, because of `LoopUnrollLimit=8192`. This depth simply makes the algorithm recurse deeper than the stack size allows. This kind of graph shape is not quite trivial to reproduce. The proposed reproducer is very easy to change into a non-reproducer, with many kinds of change, even that seem harmless to me.
The fix is also pretty direct: let's change the recursive traversal, with a worklist-based iterative one. It's not as elegant, but it doesn't overflow.
How sad stacks are still so bounded...
-------------
Commit messages:
 - Make a non-recursive PhaseCFG::set_next_call for insanely deep graphs
Changes: https://git.openjdk.org/jdk/pull/25448/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25448&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8357781
  Stats: 83 lines in 3 files changed: 75 ins; 0 del; 8 mod
  Patch: https://git.openjdk.org/jdk/pull/25448.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25448/head:pull/25448
PR: https://git.openjdk.org/jdk/pull/25448
    
    
More information about the hotspot-compiler-dev
mailing list