The-OpenROAD-Project / The-OpenROAD-Project/OpenROAD

PrimaDelayCalc::simulate1 SIGSEGV: SparseLU solve() on failed compute() (missing info() guard)

Open
#10,893 4 comments 0 reactions 1 assignee View on GitHub

@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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.