diff options
author | gatecat <gatecat@ds0.me> | 2021-07-10 23:44:21 +0100 |
---|---|---|
committer | gatecat <gatecat@ds0.me> | 2021-07-10 23:44:21 +0100 |
commit | 76070a7647b9c8b9d15a914b255298bf1b6b83b6 (patch) | |
tree | 193fcaa0c0438382317759337ba2c5182fc556ec /common/timing.cc | |
parent | 8531658019a5d8f7834c6054e10c8438d8006505 (diff) | |
download | nextpnr-76070a7647b9c8b9d15a914b255298bf1b6b83b6.tar.gz nextpnr-76070a7647b9c8b9d15a914b255298bf1b6b83b6.tar.bz2 nextpnr-76070a7647b9c8b9d15a914b255298bf1b6b83b6.zip |
timing: Fix out-of-bounds histogram bins in all cases
Signed-off-by: gatecat <gatecat@ds0.me>
Diffstat (limited to 'common/timing.cc')
-rw-r--r-- | common/timing.cc | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/common/timing.cc b/common/timing.cc index 30054e83..6a91b6e5 100644 --- a/common/timing.cc +++ b/common/timing.cc @@ -1363,7 +1363,12 @@ void timing_analysis(Context *ctx, bool print_histogram, bool print_fmax, bool p std::vector<unsigned> bins(num_bins); unsigned max_freq = 0; for (const auto &i : slack_histogram) { - auto &bin = bins[(i.first - min_slack) / bin_size]; + int bin_idx = int((i.first - min_slack) / bin_size); + if (bin_idx < 0) + bin_idx = 0; + else if (bin_idx >= int(num_bins)) + bin_idx = num_bins - 1; + auto &bin = bins.at(bin_idx); bin += i.second; max_freq = std::max(max_freq, bin); } |