mirror of
https://github.com/github/codeql.git
synced 2025-12-22 19:56:32 +01:00
Merge pull request #2480 from hvitved/dataflow/performance-tweaks
Data flow: Various performance tweaks
This commit is contained in:
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,13 +510,20 @@ private predicate simpleParameterFlow(
|
|||||||
|
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
private predicate simpleArgumentFlowsThrough0(
|
private predicate simpleArgumentFlowsThrough0(
|
||||||
|
ParameterNode p, ReturnNode ret, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
|
) {
|
||||||
|
simpleParameterFlow(p, ret, t, config) and
|
||||||
|
kind = ret.getKind()
|
||||||
|
}
|
||||||
|
|
||||||
|
pragma[noinline]
|
||||||
|
private predicate simpleArgumentFlowsThrough1(
|
||||||
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
DataFlowCall call, ArgumentNode arg, ReturnKind kind, DataFlowType t, Configuration config
|
||||||
) {
|
) {
|
||||||
nodeCand1(arg, unbind(config)) and
|
nodeCand1(arg, unbind(config)) and
|
||||||
not outBarrier(arg, config) and
|
not outBarrier(arg, config) and
|
||||||
exists(ParameterNode p, ReturnNode ret |
|
exists(ParameterNode p, ReturnNode ret |
|
||||||
simpleParameterFlow(p, ret, t, config) and
|
simpleArgumentFlowsThrough0(p, ret, kind, t, config) and
|
||||||
kind = ret.getKind() and
|
|
||||||
viableParamArg(call, p, arg)
|
viableParamArg(call, p, arg)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -534,7 +541,7 @@ private predicate simpleArgumentFlowsThrough(
|
|||||||
exists(DataFlowCall call, ReturnKind kind |
|
exists(DataFlowCall call, ReturnKind kind |
|
||||||
nodeCand1(out, unbind(config)) and
|
nodeCand1(out, unbind(config)) and
|
||||||
not inBarrier(out, config) and
|
not inBarrier(out, config) and
|
||||||
simpleArgumentFlowsThrough0(call, arg, kind, t, config) and
|
simpleArgumentFlowsThrough1(call, arg, kind, t, config) and
|
||||||
out = getAnOutNode(call, kind)
|
out = getAnOutNode(call, kind)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user