Skip to content

Commit 7d2a60e

Browse files
authored
Merge pull request github#5640 from hvitved/dataflow/path-step-perf
Data flow: Prevent bad join-order in `pathStep`
2 parents acd4cf2 + cf5f838 commit 7d2a60e

File tree

24 files changed

+69
-142
lines changed

24 files changed

+69
-142
lines changed

cpp/ql/src/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,11 +2133,8 @@ private module Stage4 {
21332133

21342134
bindingset[node, cc, config]
21352135
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

cpp/ql/src/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,11 +2133,8 @@ private module Stage4 {
21332133

21342134
bindingset[node, cc, config]
21352135
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

cpp/ql/src/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,11 +2133,8 @@ private module Stage4 {
21332133

21342134
bindingset[node, cc, config]
21352135
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

cpp/ql/src/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,11 +2133,8 @@ private module Stage4 {
21332133

21342134
bindingset[node, cc, config]
21352135
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

cpp/ql/src/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,11 +2133,8 @@ private module Stage4 {
21332133

21342134
bindingset[node, cc, config]
21352135
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,11 +2133,8 @@ private module Stage4 {
21332133

21342134
bindingset[node, cc, config]
21352135
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,11 +2133,8 @@ private module Stage4 {
21332133

21342134
bindingset[node, cc, config]
21352135
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,11 +2133,8 @@ private module Stage4 {
21332133

21342134
bindingset[node, cc, config]
21352135
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,11 +2133,8 @@ private module Stage4 {
21332133

21342134
bindingset[node, cc, config]
21352135
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

csharp/ql/src/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,11 +2133,8 @@ private module Stage4 {
21332133

21342134
bindingset[node, cc, config]
21352135
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

0 commit comments

Comments
 (0)