From 3cd58c0fae56c8092a3542d60fdefaee08d87b27 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 26 Jan 2015 14:50:03 +0000 Subject: [PATCH] re PR middle-end/64764 (internal compiler error: in is_value_included_in, at tree-ssa-uninit.c:942) 2015-01-26 Richard Biener 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. From-SVN: r220111 --- gcc/ChangeLog | 8 +++++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/uninit-19.c | 23 +++++++++++++++++++++++ gcc/tree-ssa-uninit.c | 3 ++- 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/uninit-19.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 72ad21c835e..a5676178d76 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,8 +1,14 @@ +2015-01-26 Richard Biener + + 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 PR bootstrap/64754 * tree-ssa-structalias.c (new_var_info): Initialize ruid. ---- + 2015-01-26 Terry Guo * config/arm/arm.c (arm_file_start): Update the assignment of diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 92e97c34866..9c526b7a4bc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-01-26 Richard Biener + + PR middle-end/64764 + * gcc.dg/uninit-19.c: New testcase. + 2015-01-26 Rainer Orth * 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 00000000000..3113cabe89d --- /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 25aae19f566..d04c185cc82 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)); -- 2.30.2