From: Jakub Jelinek Date: Mon, 3 Aug 2009 19:26:10 +0000 (+0200) Subject: re PR middle-end/40943 (Uninitialized warning is missed when dereferencing uninitiali... X-Git-Tag: releases/gcc-4.5.0~4194 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1768a052038172cc56a7af8ad2e90982f3c84d13;p=thirdparty%2Fgcc.git re PR middle-end/40943 (Uninitialized warning is missed when dereferencing uninitialized pointers) PR middle-end/40943 * tree-ssa.c (warn_uninitialized_var): Even on LHS warn for operand of INDIRECT_REF. * gcc.dg/uninit-6.c: Re-add XFAIL. * gcc.dg/uninit-6-O0.c: Likewise. * gcc.dg/uninit-pr40943.c: New test. From-SVN: r150379 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 04816e3f0de9..4d9d516f3eda 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-08-03 Jakub Jelinek + + PR middle-end/40943 + * tree-ssa.c (warn_uninitialized_var): Even on LHS warn for + operand of INDIRECT_REF. + 2009-08-03 Uros Bizjak * config/alpha/alpha.c (alpha_legitimate_constant_p): Reject CONST diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 26560b505fe2..e2b141cfd30d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2009-08-03 Jakub Jelinek + + PR middle-end/40943 + * gcc.dg/uninit-6.c: Re-add XFAIL. + * gcc.dg/uninit-6-O0.c: Likewise. + * gcc.dg/uninit-pr40943.c: New test. + 2009-08-03 John David Anglin PR testsuite/40858 diff --git a/gcc/testsuite/gcc.dg/uninit-6-O0.c b/gcc/testsuite/gcc.dg/uninit-6-O0.c index f4588305ffa3..e3fefe5e1c5a 100644 --- a/gcc/testsuite/gcc.dg/uninit-6-O0.c +++ b/gcc/testsuite/gcc.dg/uninit-6-O0.c @@ -39,7 +39,7 @@ make_something(int a, int b, int c) rv = malloc (sizeof (struct tree)); rv->car = 0; - APPEND(rv, field, INTEGER_T, a); /* { dg-bogus "field" "uninitialized variable warning" } */ + APPEND(rv, field, INTEGER_T, a); /* { dg-bogus "field" "uninitialized variable warning" { xfail *-*-* } } */ APPEND(rv, field, PTR_T, b); APPEND(rv, field, INTEGER_T, c); diff --git a/gcc/testsuite/gcc.dg/uninit-6.c b/gcc/testsuite/gcc.dg/uninit-6.c index 009e124fccf8..b0f2083ab4b8 100644 --- a/gcc/testsuite/gcc.dg/uninit-6.c +++ b/gcc/testsuite/gcc.dg/uninit-6.c @@ -39,7 +39,7 @@ make_something(int a, int b, int c) rv = malloc (sizeof (struct tree)); rv->car = 0; - APPEND(rv, field, INTEGER_T, a); /* { dg-bogus "field" "uninitialized variable warning" } */ + APPEND(rv, field, INTEGER_T, a); /* { dg-bogus "field" "uninitialized variable warning" { xfail *-*-* } } */ APPEND(rv, field, PTR_T, b); APPEND(rv, field, INTEGER_T, c); diff --git a/gcc/testsuite/gcc.dg/uninit-pr40943.c b/gcc/testsuite/gcc.dg/uninit-pr40943.c new file mode 100644 index 000000000000..2b6e9131cb10 --- /dev/null +++ b/gcc/testsuite/gcc.dg/uninit-pr40943.c @@ -0,0 +1,10 @@ +/* PR middle-end/40943 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -Wuninitialized" } */ + +void +foo (void) +{ + int *p; + *p = 3; /* { dg-warning "is used uninitialized" } */ +} diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 504491040b4b..28da94bb21ca 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1265,7 +1265,12 @@ warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data_) /* We do not care about LHS. */ if (wi->is_lhs) - return NULL_TREE; + { + /* Except for operands of INDIRECT_REF. */ + if (!INDIRECT_REF_P (t)) + return NULL_TREE; + t = TREE_OPERAND (t, 0); + } switch (TREE_CODE (t)) {