On 01/23/2017 10:38 AM, Jakub Jelinek wrote: > On Mon, Jan 23, 2017 at 10:19:33AM +0100, Martin Liška wrote: >> diff --git a/gcc/gimplify.c b/gcc/gimplify.c >> index 2777a23eb93..1b076fdf45c 100644 >> --- a/gcc/gimplify.c >> +++ b/gcc/gimplify.c >> @@ -1206,8 +1206,19 @@ asan_poison_variables (hash_set<tree> *variables, >> bool poison, gimple_seq *seq_p >> >> sorted_variables.qsort (sort_by_decl_uid); >> >> - for (unsigned i = 0; i < sorted_variables.length (); i++) >> - asan_poison_variable (sorted_variables[i], poison, seq_p); >> + unsigned i; >> + tree var; >> + FOR_EACH_VEC_ELT (sorted_variables, i, var) >> + { >> + asan_poison_variable (var, poison, seq_p); >> + >> + /* Add use_after_scope_memory attribute for the variable in order >> + to prevent re-written into SSA. */ >> + DECL_ATTRIBUTES (var) >> + = tree_cons (get_identifier ("use_after_scope_memory"), > > Please use "use after scope memory" to make it clear it is internal > only attribute users can't specify. > Also, can't asan_poison_variables be performed on the same var > multiple times (multiple labels, or switches, ...)? > If yes, then the addition of the attribute should be guarded > with if (!lookup_attribute ("use after scope memory", DECL_ATTRIBUTES (vars))) > so that you don't add the attributes many times. > >> + build_int_cst (integer_type_node, 1), >> + DECL_ATTRIBUTES (var)); > > Please use: > integer_one_node, DECL_ATTRIBUTES (var)); > instead. > >> --- a/gcc/tree-ssa.c >> +++ b/gcc/tree-ssa.c >> @@ -1565,6 +1565,10 @@ is_asan_mark_p (gimple *stmt) >> && VAR_P (TREE_OPERAND (addr, 0))) >> { >> tree var = TREE_OPERAND (addr, 0); >> + if (lookup_attribute ("use_after_scope_memory", >> + DECL_ATTRIBUTES (var))) >> + return false; > > See above. > > Patchset is ok for trunk with these nits fixed, thanks. > > Jakub >
Great, installed as r244791 and r244793. One more time, really thank you for help, it took some time to finalize the optimization. Martin