Message ID | alpine.LSU.2.11.1501261547050.12482@zhemvz.fhfr.qr |
---|---|
State | New |
Headers | show |
On 26-01-15 15:47, Richard Biener wrote: > 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); > +} Hi Richard, this new test fails with -fpic, because fn1 is not inlined. Adding static to fn1 allows it to pass both with and without -fpic. But that change might affect whether it still serves as a regression test for this PR, I'm not sure. Another way to fix this could be to use the warning line number 22 instead 13 for fpic. Thanks, - Tom
On Thu, 5 Feb 2015, Tom de Vries wrote: > On 26-01-15 15:47, Richard Biener wrote: > > 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); > > +} > > Hi Richard, > > this new test fails with -fpic, because fn1 is not inlined. > > Adding static to fn1 allows it to pass both with and without -fpic. But that > change might affect whether it still serves as a regression test for this PR, > I'm not sure. > > Another way to fix this could be to use the warning line number 22 instead 13 > for fpic. Either way is fine with me. Thanks, Richard.
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); +}