From ee0c6bb5e4ad64d4ee05ea0edc94a7fd6547df1e Mon Sep 17 00:00:00 2001 From: Bill Lye Date: Fri, 30 Dec 2022 10:36:38 -0800 Subject: [PATCH] Modifications to give error messages rather than assertions --- elab_expr.cc | 9 ++++++++- elab_net.cc | 14 +++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/elab_expr.cc b/elab_expr.cc index 11ceaafe4..6605e78ef 100644 --- a/elab_expr.cc +++ b/elab_expr.cc @@ -6226,7 +6226,14 @@ NetExpr* PEIdent::elaborate_expr_net_bit_(Design*des, NetScope*scope, unsigned long lwid; long idx; rc = net->sig()->sb_to_slice(prefix_indices, msv, idx, lwid); - ivl_assert(*this, rc); + + if(!rc) { + cerr << get_fileline() << ": error: Index " << net->sig()->name() + << "[" << msv << "] is out of range." + << endl; + des->errors += 1; + return 0; + } // Make an expression out of the index NetEConst*idx_c = new NetEConst(verinum(idx)); diff --git a/elab_net.cc b/elab_net.cc index 2e45929a0..72ec9e557 100644 --- a/elab_net.cc +++ b/elab_net.cc @@ -464,9 +464,17 @@ bool PEIdent::eval_part_select_(Design*des, NetScope*scope, NetNet*sig, unsigned long tmp_lwid; bool rcl = sig->sb_to_slice(prefix_indices, msb, tmp_loff, tmp_lwid); - ivl_assert(*this, rcl); - midx = tmp_loff + tmp_lwid - 1; - lidx = tmp_loff; + if(rcl) { + midx = tmp_loff + tmp_lwid - 1; + lidx = tmp_loff; + } else { + cerr << get_fileline() << ": error: Index " << sig->name() + << "[" << msb << "] is out of range." + << endl; + des->errors += 1; + midx = 0; + lidx = 0; + } } else { midx = sig->sb_to_idx(prefix_indices, msb); if (midx >= (long)sig->vector_width()) {