Check for a negative repeat value.
This patch adds checks for a negative repeat value and prints an error message under this condition.
This commit is contained in:
parent
7bc9742710
commit
8c1cca423d
|
|
@ -655,6 +655,14 @@ NetExpr* PEConcat::elaborate_expr(Design*des, NetScope*scope,
|
||||||
des->errors += 1;
|
des->errors += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rep->value().is_negative()) {
|
||||||
|
cerr << get_fileline() << ": error: Concatenation repeat "
|
||||||
|
<< "may not be negative (" << rep->value().as_long()
|
||||||
|
<< ")." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
repeat = rep;
|
repeat = rep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1578,6 +1578,14 @@ NetNet* PEConcat::elaborate_net(Design*des, NetScope*scope,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (erep->value().is_negative()) {
|
||||||
|
cerr << get_fileline() << ": error: Concatenation repeat "
|
||||||
|
<< "may not be negative (" << erep->value().as_long()
|
||||||
|
<< ")." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
repeat = erep->value().as_ulong();
|
repeat = erep->value().as_ulong();
|
||||||
delete etmp;
|
delete etmp;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -429,6 +429,11 @@ bool verinum::is_zero() const
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool verinum::is_negative() const
|
||||||
|
{
|
||||||
|
return (bits_[nbits_-1] == V1) && has_sign();
|
||||||
|
}
|
||||||
|
|
||||||
verinum pad_to_width(const verinum&that, unsigned width)
|
verinum pad_to_width(const verinum&that, unsigned width)
|
||||||
{
|
{
|
||||||
if (that.len() >= width)
|
if (that.len() >= width)
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,7 @@ class verinum {
|
||||||
// A number is "defined" if there are no x or z bits in its value.
|
// A number is "defined" if there are no x or z bits in its value.
|
||||||
bool is_defined() const;
|
bool is_defined() const;
|
||||||
bool is_zero() const;
|
bool is_zero() const;
|
||||||
|
bool is_negative() const;
|
||||||
|
|
||||||
// A number is "a string" if its value came directly from
|
// A number is "a string" if its value came directly from
|
||||||
// an ASCII description instead of a number value.
|
// an ASCII description instead of a number value.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue