diff options
Diffstat (limited to 'gcc/tree-dfa.c')
-rw-r--r-- | gcc/tree-dfa.c | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c index 36b4a5b..1945378 100644 --- a/gcc/tree-dfa.c +++ b/gcc/tree-dfa.c @@ -363,7 +363,35 @@ dump_variable (FILE *file, tree var) fprintf (file, ", is volatile"); if (is_call_clobbered (var)) - fprintf (file, ", call clobbered"); + { + fprintf (file, ", call clobbered"); + if (dump_flags & TDF_DETAILS) + { + var_ann_t va = var_ann (var); + unsigned int escape_mask = va->escape_mask; + + fprintf (file, " ("); + if (escape_mask & ESCAPE_STORED_IN_GLOBAL) + fprintf (file, ", stored in global"); + if (escape_mask & ESCAPE_TO_ASM) + fprintf (file, ", goes through ASM"); + if (escape_mask & ESCAPE_TO_CALL) + fprintf (file, ", passed to call"); + if (escape_mask & ESCAPE_BAD_CAST) + fprintf (file, ", bad cast"); + if (escape_mask & ESCAPE_TO_RETURN) + fprintf (file, ", returned from func"); + if (escape_mask & ESCAPE_TO_PURE_CONST) + fprintf (file, ", passed to pure/const"); + if (escape_mask & ESCAPE_IS_GLOBAL) + fprintf (file, ", is global var"); + if (escape_mask & ESCAPE_IS_PARM) + fprintf (file, ", is incoming pointer"); + if (escape_mask & ESCAPE_UNKNOWN) + fprintf (file, ", unknown escape"); + fprintf (file, " )"); + } + } if (default_def (var)) { @@ -719,15 +747,11 @@ add_referenced_var (tree var, struct walk_state *walk_state) *slot = (void *) var; referenced_var_insert (DECL_UID (var), var); - - /* Global variables are always call-clobbered. */ - if (is_global_var (var)) - mark_call_clobbered (var); - + /* Tag's don't have DECL_INITIAL. */ if (MTAG_P (var)) return; - + /* Scan DECL_INITIAL for pointer variables as they may contain address arithmetic referencing the address of other variables. */ |