debug return semantics
debug validation of inter edge
Merge branch 'master' of github.com:skcho/zooberry
Merge branch 'master' of github.com:skcho/zooberry
modify def/use for validation

- at call node, memory is localized by
  old: uses of callee
  new: defs+uses of callee

  example of the problem:

  void f() {
    if(rand()) {
      x = 1;
    }
  }

  int x = 0;

  void main() {
    f();
    zoo_print(x);
  }

  x should have [0,1] at zoo_print.  But, if memory is localized by
  uses of f, which is empty set here, the original value of x, 0, does
  not reach zoo_print.

  In other words, there should be a join-point for the x values.  The
  above solution makes a join-point inside f.

  Another option(solution) is to add (defs of callee) to (uses of
  return), but not sure this solves the problem.  This joins the x
  values at the return node.

- add (defs of callnode) to (uses of returnnode)

  example of the problem:

  void f(int x) {
    return;
  }

  void main() {
    f(3);
    zoo_print(x);
  }

  This is a goo analysis scenario.
  1. At "f(3)", the x is bound to 3.
  2. The x entry in the memory is pass to function f.
  3. The x entry is removed when f returns.
  4. zoo_print (x) prints bottom.

  However, for now, the validator is not that smart to understand the
  x entry bound at "f(3)" must be removed.  In his view point, x is
  just bound to 3 and f may bound x with an another value.  So,
  zoo_print(x) should print [3,3] in his think.

  In order to satisfy the stupid validator, we just add intra edges
  for the argument bindings.  If this makes analysis and validation
  too slow, we should make the validator smarter.