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