moon-slice · line 7

nodes 9 · edges 14 · slice nodes 7 · slice lines 5 · target n5 on line 7

Program dependence graphSolid edges are data dependencies; dashed edges are control dependencies. Orange is the target and green nodes are in the slice.n1 L4let mut · line 4 · defs 1 · uses 0n2 L5let mut · line 5 · defs 1 · uses 0n3 L6while · line 6 · defs 0 · uses 2n4 L6while · line 6 · defs 0 · uses 0n5 L7assign · line 7 · defs 1 · uses 2n6 L8assign · line 8 · defs 1 · uses 1n7 L10return · line 10 · defs 0 · uses 1solid = data · dashed = control · orange = target · green = slice

Source

  1  // EXPECT-BACKWARD 7 -> [4, 5, 6, 7, 8]
  2  // EXPECT-FORWARD 7 -> [7, 10]
  3  fn loop_sum(n : Int) -> Int {
• 4    let mut i = 0
• 5    let mut total = 0
• 6    while i < n {
• 7      total = total + i // target
• 8      i = i + 1
  9    }
  10    return total
  11  }
  12  

Slice nodes

nodekindlinedefsuses
n1let mut4i#2
n2let mut5total#3
n3while6i#2, n#1
n4while6
n5assign7total#3total#3, i#2
n6assign8i#2i#2

Errors

PDG (DOT)
digraph pdg {
  rankdir=LR;
  n0 -> n3 [label="data"];
  n1 -> n3 [label="data"];
  n1 -> n5 [label="data"];
  n1 -> n6 [label="data"];
  n2 -> n5 [label="data"];
  n2 -> n7 [label="data"];
  n3 -> n4 [label="control"];
  n3 -> n5 [label="control"];
  n3 -> n6 [label="control"];
  n4 -> n5 [label="control"];
  n4 -> n6 [label="control"];
  n5 -> n7 [label="data"];
  n6 -> n3 [label="data"];
  n6 -> n5 [label="data"];
}