Skip to content

Commit 5d58edb

Browse files
authored
Merge pull request github#6641 from aschackmull/dataflow/edges-fasttc
Dataflow: Only calculate fastTC for the relevant part of edges.
2 parents cd26d97 + 1af39f0 commit 5d58edb

File tree

25 files changed

+75
-75
lines changed

25 files changed

+75
-75
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3320,8 +3320,8 @@ private predicate directReach(PathNode n) {
33203320
/** Holds if `n` can reach a sink or is used in a subpath. */
33213321
private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) }
33223322

3323-
/** Holds if `n1.getSucc() = n2` and `n2` can reach a sink or is used in a subpath. */
3324-
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and reach(n2) }
3323+
/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */
3324+
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) }
33253325

33263326
private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2)
33273327

@@ -3330,7 +3330,7 @@ private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1
33303330
*/
33313331
module PathGraph {
33323332
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
3333-
query predicate edges(PathNode a, PathNode b) { pathSucc(a, b) }
3333+
query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) }
33343334

33353335
/** Holds if `n` is a node in the graph of data flow path explanations. */
33363336
query predicate nodes(PathNode n, string key, string val) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3320,8 +3320,8 @@ private predicate directReach(PathNode n) {
33203320
/** Holds if `n` can reach a sink or is used in a subpath. */
33213321
private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) }
33223322

3323-
/** Holds if `n1.getSucc() = n2` and `n2` can reach a sink or is used in a subpath. */
3324-
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and reach(n2) }
3323+
/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */
3324+
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) }
33253325

33263326
private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2)
33273327

@@ -3330,7 +3330,7 @@ private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1
33303330
*/
33313331
module PathGraph {
33323332
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
3333-
query predicate edges(PathNode a, PathNode b) { pathSucc(a, b) }
3333+
query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) }
33343334

33353335
/** Holds if `n` is a node in the graph of data flow path explanations. */
33363336
query predicate nodes(PathNode n, string key, string val) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3320,8 +3320,8 @@ private predicate directReach(PathNode n) {
33203320
/** Holds if `n` can reach a sink or is used in a subpath. */
33213321
private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) }
33223322

3323-
/** Holds if `n1.getSucc() = n2` and `n2` can reach a sink or is used in a subpath. */
3324-
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and reach(n2) }
3323+
/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */
3324+
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) }
33253325

33263326
private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2)
33273327

@@ -3330,7 +3330,7 @@ private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1
33303330
*/
33313331
module PathGraph {
33323332
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
3333-
query predicate edges(PathNode a, PathNode b) { pathSucc(a, b) }
3333+
query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) }
33343334

33353335
/** Holds if `n` is a node in the graph of data flow path explanations. */
33363336
query predicate nodes(PathNode n, string key, string val) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3320,8 +3320,8 @@ private predicate directReach(PathNode n) {
33203320
/** Holds if `n` can reach a sink or is used in a subpath. */
33213321
private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) }
33223322

3323-
/** Holds if `n1.getSucc() = n2` and `n2` can reach a sink or is used in a subpath. */
3324-
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and reach(n2) }
3323+
/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */
3324+
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) }
33253325

33263326
private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2)
33273327

@@ -3330,7 +3330,7 @@ private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1
33303330
*/
33313331
module PathGraph {
33323332
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
3333-
query predicate edges(PathNode a, PathNode b) { pathSucc(a, b) }
3333+
query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) }
33343334

33353335
/** Holds if `n` is a node in the graph of data flow path explanations. */
33363336
query predicate nodes(PathNode n, string key, string val) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3320,8 +3320,8 @@ private predicate directReach(PathNode n) {
33203320
/** Holds if `n` can reach a sink or is used in a subpath. */
33213321
private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) }
33223322

3323-
/** Holds if `n1.getSucc() = n2` and `n2` can reach a sink or is used in a subpath. */
3324-
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and reach(n2) }
3323+
/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */
3324+
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) }
33253325

33263326
private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2)
33273327

@@ -3330,7 +3330,7 @@ private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1
33303330
*/
33313331
module PathGraph {
33323332
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
3333-
query predicate edges(PathNode a, PathNode b) { pathSucc(a, b) }
3333+
query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) }
33343334

33353335
/** Holds if `n` is a node in the graph of data flow path explanations. */
33363336
query predicate nodes(PathNode n, string key, string val) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3320,8 +3320,8 @@ private predicate directReach(PathNode n) {
33203320
/** Holds if `n` can reach a sink or is used in a subpath. */
33213321
private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) }
33223322

3323-
/** Holds if `n1.getSucc() = n2` and `n2` can reach a sink or is used in a subpath. */
3324-
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and reach(n2) }
3323+
/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */
3324+
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) }
33253325

33263326
private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2)
33273327

@@ -3330,7 +3330,7 @@ private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1
33303330
*/
33313331
module PathGraph {
33323332
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
3333-
query predicate edges(PathNode a, PathNode b) { pathSucc(a, b) }
3333+
query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) }
33343334

33353335
/** Holds if `n` is a node in the graph of data flow path explanations. */
33363336
query predicate nodes(PathNode n, string key, string val) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3320,8 +3320,8 @@ private predicate directReach(PathNode n) {
33203320
/** Holds if `n` can reach a sink or is used in a subpath. */
33213321
private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) }
33223322

3323-
/** Holds if `n1.getSucc() = n2` and `n2` can reach a sink or is used in a subpath. */
3324-
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and reach(n2) }
3323+
/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */
3324+
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) }
33253325

33263326
private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2)
33273327

@@ -3330,7 +3330,7 @@ private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1
33303330
*/
33313331
module PathGraph {
33323332
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
3333-
query predicate edges(PathNode a, PathNode b) { pathSucc(a, b) }
3333+
query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) }
33343334

33353335
/** Holds if `n` is a node in the graph of data flow path explanations. */
33363336
query predicate nodes(PathNode n, string key, string val) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3320,8 +3320,8 @@ private predicate directReach(PathNode n) {
33203320
/** Holds if `n` can reach a sink or is used in a subpath. */
33213321
private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) }
33223322

3323-
/** Holds if `n1.getSucc() = n2` and `n2` can reach a sink or is used in a subpath. */
3324-
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and reach(n2) }
3323+
/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */
3324+
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) }
33253325

33263326
private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2)
33273327

@@ -3330,7 +3330,7 @@ private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1
33303330
*/
33313331
module PathGraph {
33323332
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
3333-
query predicate edges(PathNode a, PathNode b) { pathSucc(a, b) }
3333+
query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) }
33343334

33353335
/** Holds if `n` is a node in the graph of data flow path explanations. */
33363336
query predicate nodes(PathNode n, string key, string val) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3320,8 +3320,8 @@ private predicate directReach(PathNode n) {
33203320
/** Holds if `n` can reach a sink or is used in a subpath. */
33213321
private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) }
33223322

3323-
/** Holds if `n1.getSucc() = n2` and `n2` can reach a sink or is used in a subpath. */
3324-
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and reach(n2) }
3323+
/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */
3324+
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) }
33253325

33263326
private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2)
33273327

@@ -3330,7 +3330,7 @@ private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1
33303330
*/
33313331
module PathGraph {
33323332
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
3333-
query predicate edges(PathNode a, PathNode b) { pathSucc(a, b) }
3333+
query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) }
33343334

33353335
/** Holds if `n` is a node in the graph of data flow path explanations. */
33363336
query predicate nodes(PathNode n, string key, string val) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3320,8 +3320,8 @@ private predicate directReach(PathNode n) {
33203320
/** Holds if `n` can reach a sink or is used in a subpath. */
33213321
private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) }
33223322

3323-
/** Holds if `n1.getSucc() = n2` and `n2` can reach a sink or is used in a subpath. */
3324-
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and reach(n2) }
3323+
/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */
3324+
private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) }
33253325

33263326
private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2)
33273327

@@ -3330,7 +3330,7 @@ private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1
33303330
*/
33313331
module PathGraph {
33323332
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
3333-
query predicate edges(PathNode a, PathNode b) { pathSucc(a, b) }
3333+
query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) }
33343334

33353335
/** Holds if `n` is a node in the graph of data flow path explanations. */
33363336
query predicate nodes(PathNode n, string key, string val) {

0 commit comments

Comments
 (0)