Guard traversal of certain kinds of mid-optimization IfStatement
When the test expression has a side-effect, but both the true and else blocks are empty, the optimizer moves the test out to a standalone ExpressionStatement. Updating the usage in that situation involves traversing an IfStatement with no test. Bug: oss-fuzz:26666 Change-Id: I2fb4004f2401784402040345df49a7d42e4aab5e Reviewed-on: https://skia-review.googlesource.com/c/skia/+/329960 Reviewed-by: John Stiles <johnstiles@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
This commit is contained in:
parent
fdf6148102
commit
5567a6091c
@ -558,7 +558,7 @@ bool TProgramVisitor<PROG, EXPR, STMT, ELEM>::visitStatement(STMT s) {
|
|||||||
}
|
}
|
||||||
case Statement::Kind::kIf: {
|
case Statement::Kind::kIf: {
|
||||||
auto& i = s.template as<IfStatement>();
|
auto& i = s.template as<IfStatement>();
|
||||||
return this->visitExpression(*i.test()) ||
|
return (i.test() && this->visitExpression(*i.test())) ||
|
||||||
(i.ifTrue() && this->visitStatement(*i.ifTrue())) ||
|
(i.ifTrue() && this->visitStatement(*i.ifTrue())) ||
|
||||||
(i.ifFalse() && this->visitStatement(*i.ifFalse()));
|
(i.ifFalse() && this->visitStatement(*i.ifFalse()));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user