Sorry, here is the patch.
------------------------------------------------------------------
Sender:bin.cheng <bin.ch...@linux.alibaba.com>
Sent At:2020 Jan. 8 (Wed.) 12:58
Recipient:GCC Patches <gcc-patches@gcc.gnu.org>
Subject:[PATCH GCC11]Improve uninitialized warning with value range info


Hi,

Function use_pred_not_overlap_with_undef_path_pred of 
pass_late_warn_uninitialized
checks if predicate of variable use overlaps with predicate of undefined 
control flow path.
For now, it only checks ssa_var comparing against constant, this can be 
improved where
ssa_var compares against another ssa_var with value range info, as described in 
comment:

+         /* Check value range info of rhs, do following transforms:
+              flag_var < [min, max]  ->  flag_var < max
+              flag_var > [min, max]  ->  flag_var > min
+
+            We can also transform LE_EXPR/GE_EXPR to LT_EXPR/GT_EXPR:
+              flag_var <= [min, max] ->  flag_var < [min, max+1]
+              flag_var >= [min, max] ->  flag_var > [min-1, max]
+            if no overflow/wrap.  */

This change can avoid some false warning.  Bootstrap and test on x86_64, any 
comment?

Thanks,
bin

2020-01-08  Bin Cheng  <bin.li...@linux.alibaba.com>

 * tree-ssa-uninit.c (find_var_cmp_const): New function.
 (use_pred_not_overlap_with_undef_path_pred): Call above.

Attachment: check-uninit_warning-with-vrinfo-20200108.txt
Description: Binary data

Reply via email to