On Tue, Jul 24, 2018 at 01:37:32PM +0200, Tom de Vries wrote: > Another drawback is that the fake uses confuse the unitialized warning > analysis, so that is switched off for -fkeep-vars-live.
Is that really needed? I.e. can't you for the purpose of uninitialized warning analysis ignore the clobber = var uses? Is the -fkeep-vars-live option -fcompare-debug friendly? > --- a/gcc/cfgexpand.c > +++ b/gcc/cfgexpand.c > @@ -3533,6 +3533,13 @@ expand_clobber (tree lhs) > } > } > > +static void > +expand_use (tree rhs) > +{ > + rtx target = expand_expr (rhs, NULL_RTX, VOIDmode, EXPAND_NORMAL); > + emit_use (target); > +} Missing function comment. > +fkeep-vars-live > +Common Report Var(flag_keep_vars_live) Optimization > +Add artificial uses of local vars at end of scope. at the end of scope? > --- a/gcc/gimplify.c > +++ b/gcc/gimplify.c > @@ -1264,6 +1264,23 @@ asan_poison_variables (hash_set<tree> *variables, bool > poison, gimple_seq *seq_p > } > } > > +static gimple_seq > +gimple_build_uses (tree vars) Missing function comment. > --- a/gcc/tree-ssa-alias.c > +++ b/gcc/tree-ssa-alias.c > @@ -1368,6 +1368,10 @@ refs_may_alias_p_1 (ao_ref *ref1, ao_ref *ref2, bool > tbaa_p) > poly_int64 max_size1 = -1, max_size2 = -1; > bool var1_p, var2_p, ind1_p, ind2_p; > > + if ((ref1->ref && TREE_CLOBBER_P (ref1->ref)) || || should go on the next line. > + (ref2->ref && TREE_CLOBBER_P (ref2->ref))) > + return false; > + > gcc_checking_assert ((!ref1->ref > || TREE_CODE (ref1->ref) == SSA_NAME > || DECL_P (ref1->ref) > --- a/gcc/tree-ssa-uninit.c > +++ b/gcc/tree-ssa-uninit.c > @@ -2628,7 +2628,7 @@ warn_uninitialized_phi (gphi *phi, vec<gphi *> > *worklist, > static bool > gate_warn_uninitialized (void) > { > - return warn_uninitialized || warn_maybe_uninitialized; > + return (warn_uninitialized || warn_maybe_uninitialized) && > !flag_keep_vars_live; > } See above. Jakub