This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [RFC 2/3, debug] Add fkeep-vars-live
On 07/24/2018 01:46 PM, Jakub Jelinek wrote:
> 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?
>
This seems to work on the test-case that failed during testing
(g++.dg/uninit-pred-4.C):
...
diff --git a/gcc/tree-ssa-uninit.c b/gcc/tree-ssa-uninit.c
index 77f090bfa80..953db9ed02d 100644
--- a/gcc/tree-ssa-uninit.c
+++ b/gcc/tree-ssa-uninit.c
@@ -132,6 +132,9 @@ warn_uninit (enum opt_code wc, tree t, tree expr,
tree var,
if (is_gimple_assign (context)
&& gimple_assign_rhs_code (context) == COMPLEX_EXPR)
return;
+ if (gimple_assign_single_p (context)
+ && TREE_CLOBBER_P (gimple_assign_lhs (context)))
+ return;
if (!has_undefined_value_p (t))
return;
...
But I don't know the pass well enough to know whether this is a
sufficient fix.
> Is the -fkeep-vars-live option -fcompare-debug friendly?
>
I think so, there's no reference to debug flags or instructions.
>> --- 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?
Is this better?
+Add artificial use for each local variable at the end of the
declaration scope
Thanks,
- Tom