@kfree exists@
identifier f;
type T;
identifier x;
@@

void f(...,T x,...) {
  ...
  kfree(x);
  ...
}

@other_path exists@
identifier kfree.f;
type kfree.T;
identifier kfree.x;
@@

void f(...,T x,...) {
  ... when != kfree(x);
}

@ script:python depends on other_path @
f << kfree.f; // identifier
t << kfree.T; // identifier
@@

print "possible_kfree: FN:%s TY:%s" % (f,t)

@ script:python depends on !other_path @
f << kfree.f; // identifier
t << kfree.T; // identifier
@@

print "guaranteed_kfree: FN:%s TY:%s" % (f,t)