Merge pull request #10575 from aschackmull/dataflow/cleanup-module

Dataflow: Minor visibility cleanup
This commit is contained in:
Anders Schack-Mulligen
2022-09-27 10:10:53 +02:00
committed by GitHub
36 changed files with 108 additions and 252 deletions

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }

View File

@@ -598,13 +598,9 @@ private predicate hasSinkCallCtx(Configuration config) {
} }
private module Stage1 implements StageSig { private module Stage1 implements StageSig {
class ApApprox = Unit;
class Ap = Unit; class Ap = Unit;
class ApOption = Unit; private class Cc = boolean;
class Cc = boolean;
/* Begin: Stage 1 logic. */ /* Begin: Stage 1 logic. */
/** /**
@@ -613,7 +609,7 @@ private module Stage1 implements StageSig {
* The Boolean `cc` records whether the node is reached through an * The Boolean `cc` records whether the node is reached through an
* argument in a call. * argument in a call.
*/ */
predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { private predicate fwdFlow(NodeEx node, Cc cc, Configuration config) {
sourceNode(node, _, config) and sourceNode(node, _, config) and
if hasSourceCallCtx(config) then cc = true else cc = false if hasSourceCallCtx(config) then cc = true else cc = false
or or
@@ -753,7 +749,7 @@ private module Stage1 implements StageSig {
* the enclosing callable in order to reach a sink. * the enclosing callable in order to reach a sink.
*/ */
pragma[nomagic] pragma[nomagic]
predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { private predicate revFlow(NodeEx node, boolean toReturn, Configuration config) {
revFlow0(node, toReturn, config) and revFlow0(node, toReturn, config) and
fwdFlow(node, config) fwdFlow(node, config)
} }