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

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

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

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

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

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

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

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

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

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

-------- @callees callees-main-apply1 --------
this static function call dispatches to:
	main.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:
	main.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:
	(main.myint).f

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

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

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

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

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

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

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

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

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

