use manual recursion in Refinements::inGuard

This commit is contained in:
Erik Krogh Kristensen
2021-02-18 00:52:14 +01:00
parent f81860c402
commit 33f310b91e

View File

@@ -324,7 +324,11 @@ class VarRefinementContext extends RefinementContext, TVarRefinementContext {
}
/** Holds if `e` is nested inside a guard node. */
private predicate inGuard(Expr e) { e.getParentExpr*() = any(GuardControlFlowNode g).getTest() }
private predicate inGuard(Expr e) {
e = any(GuardControlFlowNode g).getTest()
or
inGuard(e.getParentExpr())
}
/**
* An abstract value of a refinement expression.