From 89de4caf6c1c97bd22cdd79abe24788ec3bb3665 Mon Sep 17 00:00:00 2001
From: David Shah <dave@ds0.me>
Date: Mon, 25 Feb 2019 11:03:59 +0000
Subject: timing: Fix negative slack overflow issue

Signed-off-by: David Shah <dave@ds0.me>
---
 common/timing.cc | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/common/timing.cc b/common/timing.cc
index db38b11b..8ade2660 100644
--- a/common/timing.cc
+++ b/common/timing.cc
@@ -611,8 +611,9 @@ struct Timing
                         continue;
                     delay_t dmax = crit_path->at(ClockPair{startdomain.first, startdomain.first}).path_delay;
                     for (size_t i = 0; i < net->users.size(); i++) {
-                        float criticality = 1.0f - (float(nc.slack.at(i) - worst_slack.at(startdomain.first)) / dmax);
-                        nc.criticality.at(i) = criticality;
+                        float criticality =
+                                1.0f - ((float(nc.slack.at(i)) - float(worst_slack.at(startdomain.first))) / dmax);
+                        nc.criticality.at(i) = std::min<double>(1.0, std::max<double>(0.0, criticality));
                     }
                     nc.max_path_length = nd.max_path_length;
                     nc.cd_worst_slack = worst_slack.at(startdomain.first);
-- 
cgit v1.2.3