Fix enum constant propagation, bug970.

This commit is contained in:
Wilson Snyder
2015-10-01 21:15:01 -04:00
parent dc57282168
commit c60ffd7fd9
4 changed files with 34 additions and 0 deletions
+13
View File
@@ -345,6 +345,19 @@ private:
setNumber(nodep, &(nodep->num()));
}
}
virtual void visit(AstEnumItemRef* nodep, AstNUser*) {
checkNodeInfo(nodep);
if (!nodep->itemp()) nodep->v3fatalSrc("Not linked");
if (!m_checkOnly && optimizable()) {
AstNode* valuep = nodep->itemp()->valuep();
if (valuep) {
valuep->iterateAndNext(*this);
newNumber(nodep)->opAssign(*fetchNumber(valuep));
} else {
clearOptimizable(nodep, "No value found for enum item");
}
}
}
virtual void visit(AstNodeUniop* nodep, AstNUser*) {
if (!optimizable()) return; // Accelerate
checkNodeInfo(nodep);