I am writing a gcc plugin and am trying to detect if a value assigned by a function call, is a global variable or not. Unfortunately, all calls to 'is_global_var' with a DECL type are returning false.
My pass executes after alias analysis, and ipa analysis. The cfun->gimple_df->ipa_pta is set to true, so I know the pta analysis should have resolved global information. Plugin code: if (is_gimple_call(stmt)) { gimple_debug_bb(stmt); tree lhs = gimple_call_lhs(stmt); if (lhs && is_global_var(SSA_NAME_VAR(lhs))) printf("Global detected\n"); } Source code (in Go): package main type T struct {id int} var myglobal *T; func fn() *T { myglobal = new(T); // Should be detected as global return myglobal; } func main() { t := fn(); } Basic Block dump as my plugin code executes for function 'fn': <bb 2>: # .MEM_4 = VDEF <.MEM_3(D)> main.myglobal.13_1 = __go_new_nopointers (4); # .MEM_5 = VDEF <.MEM_4> main.myglobal = main.myglobal.13_1; # VUSE <.MEM_5> D.186_2 = main.myglobal; return D.186_2; Any insight would be helpful. Thanks! -Matt