Respond better to some error/sorry situations.
This commit is contained in:
parent
6eeef8311f
commit
c1b73c83f4
|
|
@ -3293,6 +3293,12 @@ NetExpr* PEIdent::elaborate_expr_net_idx_up_(Design*des, NetScope*scope,
|
|||
return ss;
|
||||
}
|
||||
|
||||
if (net->sig()->packed_dims().size() > 1) {
|
||||
cerr << get_fileline() << ": sorry: Indexed part select of packed arrays not supported here." << endl;
|
||||
des->errors += 1;
|
||||
return net;
|
||||
}
|
||||
|
||||
base = normalize_variable_base(base, net->msi(), net->lsi(), wid, true);
|
||||
|
||||
NetESelect*ss = new NetESelect(net, base, wid, IVL_SEL_IDX_UP);
|
||||
|
|
@ -3551,7 +3557,7 @@ NetExpr* PEIdent::elaborate_expr_net(Design*des, NetScope*scope,
|
|||
|
||||
list<long> prefix_indices;
|
||||
bool rc = evaluate_index_prefix(des, scope, prefix_indices, path_.back().index);
|
||||
ivl_assert(*this, rc);
|
||||
if (!rc) return 0;
|
||||
|
||||
// If this is a part select of a signal, then make a new
|
||||
// temporary signal that is connected to just the
|
||||
|
|
|
|||
|
|
@ -359,7 +359,7 @@ bool PEIdent::elaborate_lval_net_bit_(Design*des,
|
|||
{
|
||||
list<long>prefix_indices;
|
||||
bool rc = calculate_packed_indices_(des, scope, lv->sig(), prefix_indices);
|
||||
ivl_assert(*this, rc);
|
||||
if (!rc) return false;
|
||||
|
||||
const name_component_t&name_tail = path_.back();
|
||||
ivl_assert(*this, !name_tail.index.empty());
|
||||
|
|
@ -597,6 +597,13 @@ bool PEIdent::elaborate_lval_net_idx_(Design*des,
|
|||
}
|
||||
}
|
||||
} else {
|
||||
if (reg->packed_dims().size() > 1) {
|
||||
cerr << get_fileline() << ": sorry: "
|
||||
<< "Indexed part select of packed arrays not supported nere." << endl;
|
||||
des->errors += 1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Correct the mux for the range of the vector. */
|
||||
if (use_sel == index_component_t::SEL_IDX_UP) {
|
||||
base = normalize_variable_base(base, reg->packed_dims(),
|
||||
|
|
|
|||
|
|
@ -937,13 +937,13 @@ bool evaluate_index_prefix(Design*des, NetScope*scope,
|
|||
assert(icur != indices.end());
|
||||
assert(icur->sel == index_component_t::SEL_BIT);
|
||||
NetExpr*texpr = elab_and_eval(des, scope, icur->msb, -1, true);
|
||||
ivl_assert(*icur->msb, texpr);
|
||||
|
||||
long tmp;
|
||||
if (!eval_as_long(tmp, texpr)) {
|
||||
if (texpr == 0 || !eval_as_long(tmp, texpr)) {
|
||||
cerr << icur->msb->get_fileline() << ": error: "
|
||||
"Array index expressions must be constant." << endl;
|
||||
"Array index expressions must be constant here." << endl;
|
||||
des->errors += 1;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
prefix_indices .push_back(tmp);
|
||||
|
|
|
|||
Loading…
Reference in New Issue