The-OpenROAD-Project / The-OpenROAD-Project/OpenROAD
PrimaDelayCalc::simulate1 SIGSEGV: SparseLU solve() on failed compute() (missing info() guard)
@dsengupta0628 is already working on this.
Since Jul 13, 2026.
- Dominant language
- Verilog
- Stars
- 3.1k
- Forks
- 1k
- Avg merge
- 2d 23h
- Merged PRs (30d)
- 136
Description
Summary
sta::PrimaDelayCalc::simulate1() calls Eigen::SparseLU::solve() without
checking that the preceding compute() succeeded. For some degenerate
reduced RC systems compute() returns a non-Success status, and calling
solve() on the unfactorized solver dereferences an uninitialized supernodal
structure and crashes with SIGSEGV.
The twin call site in the same file (primaReduce()) already guards this:
Eigen::SparseLU<MatrixSd> G_solver(G_);
if (G_solver.info() != Eigen::Success)
report_->error(1752, "G matrix is singular.");
but simulate1() does not:
A.makeCompressed();
Eigen::SparseLU<MatrixSd> A_solver;
A_solver.compute(A);
...
x = A_solver.solve(rhs); // <-- SIGSEGV when compute() failed
Crash
Signal 11 received
...
Eigen::internal::MappedSuperNodalMatrix<double, int>::solveInPlace<...>(...)
sta::PrimaDelayCalc::simulate1(...)
sta::PrimaDelayCalc::simulate()
sta::PrimaDelayCalc::gateDelay(...)
sta::GraphDelayCalc::findVertexDelay(...)
...
sta::Sta::updateTiming(bool)
rsz::Resizer::swapArithModules(...)
How to reproduce
Design swerv_wrapper / asap7, at the post-global-place resize step
(3_4_place_resized), with the prima (CCS) delay calculator.
git clone https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts
cd OpenROAD-flow-scripts
git submodule update --init tools/OpenROAD
git -C tools/OpenROAD fetch origin 17d1e1d0f2569fb9e61a3e983eef69fe339039a9
git -C tools/OpenROAD checkout 17d1e1d0f2569fb9e61a3e983eef69fe339039a9
git -C tools/OpenROAD submodule update --init --recursive
Build
cd flow
make DESIGN_CONFIG=./designs/asap7/swerv_wrapper/config.mk place
# → SIGSEGV at 3_4_place_resized (sta::GraphDelayCalc → PrimaDelayCalc::simulate1)
/home/mkim/prima_crash_repro/3_3_place_gp.odb.gz (~18 MB)
/home/mkim/prima_crash_repro/2_floorplan.sdc.gz
/home/mkim/prima_crash_repro/replay.tcl (resize preamble)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.