------- Additional Comments From kazu at cs dot umass dot edu 2005-02-06 18:08 ------- Yes, global_constant is considered call clobbered.
Here is the full dump of .t18.alias1. ;; Function foo (foo) foo: Total number of aliased vops: 1 Referenced variables in foo: 5 Variable: global_constant.0, UID 0, const int Variable: global_constant, UID 1, const int, is an alias tag, is global, call clobbered, default def: global_constant_1 Variable: D.1128, UID 2, union node *, type memory tag: TMT.1 Variable: p, UID 3, union node *, type memory tag: TMT.1, default def: p_3 Variable: TMT.1, UID 4, union node, is addressable, is global, call clobbered, may aliases: { global_constant } Pointed-to sets for pointers in foo p_3, is dereferenced, points-to anything D.1128_4, is dereferenced, its value escapes, points-to anything Flow-insensitive alias information for foo Aliased symbols global_constant, UID 1, const int, is an alias tag, is global, call clobbered, default def: global_constant_1 TMT.1, UID 4, union node, is addressable, is global, call clobbered, may aliases: { global_constant } Dereferenced pointers D.1128, UID 2, union node *, type memory tag: TMT.1 p, UID 3, union node *, type memory tag: TMT.1, default def: p_3 Type memory tags TMT.1, UID 4, union node, is addressable, is global, call clobbered, may aliases: { global_constant } Flow-sensitive alias information for foo SSA_NAME pointers Name memory tags foo (p) { union node * D.1128; const int global_constant.0; <bb 0>: # VUSE <global_constant_1>; global_constant.0_2 = global_constant; if (global_constant.0_2 == 1) goto <L0>; else goto <L1>; <L0>:; # VUSE <global_constant_1>; abort (); <L1>:; # VUSE <global_constant_1>; D.1128_4 = p_3->ptr; # global_constant_6 = V_MAY_DEF <global_constant_1>; bar (D.1128_4); # VUSE <global_constant_6>; global_constant.0_5 = global_constant; if (global_constant.0_5 == 1) goto <L2>; else goto <L3>; <L2>:; # VUSE <global_constant_6>; abort (); <L3>:; return; } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19789