-------- @pointsto pointsto-A-x --------
this *int may point to these objects:
	a
	b

-------- @callstack callstack-A --------
Found a call path from root to calls.A
calls.A
dynamic function call from calls.apply
concurrent static function call from calls.main

-------- @pointsto pointsto-B-x --------
this *int may point to these objects:
	a
	b

-------- @callers callers-B --------
calls.B is called from these 1 sites:
	dynamic function call from calls.apply

-------- @callees callees-apply --------
this dynamic function call dispatches to:
	calls.A
	calls.B

-------- @callers callers-apply --------
calls.apply is called from these 2 sites:
	concurrent static function call from calls.main
	deferred static function call from calls.main

-------- @callers callers-store --------
calls.store is called from these 2 sites:
	static function call from calls.main
	static function call from calls.main

-------- @pointsto pointsto-result-f --------
this func() *int may point to these objects:
	calls.main$1

-------- @callees callees-main.call-f --------
this dynamic function call dispatches to:
	calls.main$1

-------- @callers callers-main.call --------
calls.call is called from these 2 sites:
	static function call from calls.main
	static function call from calls.main

-------- @callees callees-main-apply1 --------
this static function call dispatches to:
	calls.apply

-------- @pointsto pointsto-pc --------
this *int may point to these objects:
	c

-------- @pointsto pointsto-pd --------
this *int may point to these objects:
	d

-------- @callees callees-err-no-call --------

Error: there is no function call here
-------- @callees callees-err-builtin --------

Error: this is a call to the built-in 'print' operator
-------- @callees callees-err-conversion --------

Error: this is a type conversion, not a function call
-------- @callees callees-err-bad-selection --------

Error: ambiguous selection within function call (or conversion)
-------- @callees callees-err-deadcode1 --------
this static function call dispatches to:
	calls.main

-------- @callees callees-err-nil-func --------
dynamic function call on nil value

-------- @callees callees-err-nil-interface --------
dynamic method call on nil value

-------- @callees callees-not-a-wrapper --------
this dynamic method call dispatches to:
	(calls.myint).f

-------- @callees callees-static-call --------
this static function call dispatches to:
	calls.foo

-------- @callees callees-qualified-call --------
this static function call dispatches to:
	fmt.Println

-------- @callees callees-static-method-call --------
this static function call dispatches to:
	(calls.method).f

-------- @callees callees-implicit-selection-method-call --------
this dynamic method call dispatches to:
	(calls.method).f

-------- @callers callers-not-a-wrapper --------
(calls.myint).f is called from these 1 sites:
	dynamic method call from calls.main

-------- @callees callees-err-deadcode2 --------
this static function call dispatches to:
	calls.main

-------- @callstack callstack-err-deadcode --------
calls.deadcode is unreachable in this analysis scope

-------- @callees callees-err-deadcode3 --------

Error: this call site is unreachable in this analysis
-------- @callers callers-global --------
calls.init is called from these 1 sites:
the root of the call graph

-------- @callstack callstack-init --------
Found a call path from root to calls.init#1
calls.init#1
static function call from calls.init

