aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/uninit-19.c23
-rw-r--r--gcc/tree-ssa-uninit.c3
4 files changed, 37 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 72ad21c..a567617 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,8 +1,14 @@
+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.
+
2015-01-26 H.J. Lu <hongjiu.lu@intel.com>
PR bootstrap/64754
* tree-ssa-structalias.c (new_var_info): Initialize ruid.
----
+
2015-01-26 Terry Guo <terry.guo@arm.com>
* config/arm/arm.c (arm_file_start): Update the assignment of
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 92e97c3..9c526b7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-26 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/64764
+ * gcc.dg/uninit-19.c: New testcase.
+
2015-01-26 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* lib/target-supports.exp (check_effective_target_vect64): Add
diff --git a/gcc/testsuite/gcc.dg/uninit-19.c b/gcc/testsuite/gcc.dg/uninit-19.c
new file mode 100644
index 0000000..3113cab
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/uninit-19.c
@@ -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);
+}
diff --git a/gcc/tree-ssa-uninit.c b/gcc/tree-ssa-uninit.c
index 25aae19..d04c185 100644
--- a/gcc/tree-ssa-uninit.c
+++ b/gcc/tree-ssa-uninit.c
@@ -1377,7 +1377,8 @@ is_pred_expr_subset_of (pred_info expr1, pred_info expr2)
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));