Generate SELRANGE instead of errors for potentially unreachable code (#2625) (#2754)

When using a "if" statement inside an always block, part of the code may
be unreachable. This can be used to avoid errors, but it generated an
error, this commit demotes this to a warning. Partly fixes #2625.
This commit is contained in:
Pierre-Henri Horrein
2021-01-15 07:31:48 -05:00
committed by GitHub
parent fb2c243fc7
commit 3c849d7ce0
7 changed files with 78 additions and 19 deletions
+15 -12
View File
@@ -369,10 +369,11 @@ private:
lsb = x;
}
if (lsb > msb) {
nodep->v3error("["
<< msb << ":" << lsb
<< "] Range extract has backward bit ordering, perhaps you wanted ["
<< lsb << ":" << msb << "]");
nodep->v3warn(
SELRANGE,
"[" << msb << ":" << lsb
<< "] Range extract has backward bit ordering, perhaps you wanted [" << lsb
<< ":" << msb << "]");
int x = msb;
msb = lsb;
lsb = x;
@@ -398,10 +399,11 @@ private:
lsb = x;
}
if (lsb > msb) {
nodep->v3error("["
<< msb << ":" << lsb
<< "] Range extract has backward bit ordering, perhaps you wanted ["
<< lsb << ":" << msb << "]");
nodep->v3warn(
SELRANGE,
"[" << msb << ":" << lsb
<< "] Range extract has backward bit ordering, perhaps you wanted [" << lsb
<< ":" << msb << "]");
int x = msb;
msb = lsb;
lsb = x;
@@ -419,10 +421,11 @@ private:
} else if (VN_IS(ddtypep, NodeUOrStructDType)) {
// Classes aren't little endian
if (lsb > msb) {
nodep->v3error("["
<< msb << ":" << lsb
<< "] Range extract has backward bit ordering, perhaps you wanted ["
<< lsb << ":" << msb << "]");
nodep->v3warn(
SELRANGE,
"[" << msb << ":" << lsb
<< "] Range extract has backward bit ordering, perhaps you wanted [" << lsb
<< ":" << msb << "]");
int x = msb;
msb = lsb;
lsb = x;