This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR64764
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 26 Jan 2015 15:47:40 +0100 (CET)
- Subject: [PATCH] Fix PR64764
- Authentication-results: sourceware.org; auth=none
The following fixes PR64764.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
Richard.
2015-01-26 Richard Biener <rguenther@suse.de>
PR middle-end/64764
* tree-ssa-uninit.c (is_pred_expr_subset_of): Handle
combining two BIT_AND_EXPR predicates.
* gcc.dg/uninit-19.c: New testcase.
Index: gcc/tree-ssa-uninit.c
===================================================================
--- gcc/tree-ssa-uninit.c (revision 220107)
+++ gcc/tree-ssa-uninit.c (working copy)
@@ -1377,7 +1377,8 @@ is_pred_expr_subset_of (pred_info expr1,
if (expr2.invert)
code2 = invert_tree_comparison (code2, false);
- if (code1 == EQ_EXPR && code2 == BIT_AND_EXPR)
+ if ((code1 == EQ_EXPR || code1 == BIT_AND_EXPR)
+ && code2 == BIT_AND_EXPR)
return wi::eq_p (expr1.pred_rhs,
wi::bit_and (expr1.pred_rhs, expr2.pred_rhs));
Index: gcc/testsuite/gcc.dg/uninit-19.c
===================================================================
--- gcc/testsuite/gcc.dg/uninit-19.c (revision 0)
+++ gcc/testsuite/gcc.dg/uninit-19.c (working copy)
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-options "-O -Wuninitialized" } */
+
+int a, l, m;
+float *b;
+float c, d, e, g, h;
+unsigned char i, k;
+void
+fn1 (int p1, float *f1, float *f2, float *f3, unsigned char *c1, float *f4,
+ unsigned char *c2, float *p10)
+{
+ if (p1 & 8)
+ b[3] = p10[a]; /* { dg-warning "may be used uninitialized" } */
+}
+
+void
+fn2 ()
+{
+ float *n;
+ if (l & 6)
+ n = &c + m;
+ fn1 (l, &d, &e, &g, &i, &h, &k, n);
+}