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