diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/uninit-19.c | 23 | ||||
-rw-r--r-- | gcc/tree-ssa-uninit.c | 3 |
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)); |