From cbb04ca92323480471b9475688cc20af9409045a Mon Sep 17 00:00:00 2001 From: jakub Date: Mon, 3 Aug 2009 19:26:10 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@150379 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 7 +++++++ gcc/testsuite/gcc.dg/uninit-6-O0.c | 2 +- gcc/testsuite/gcc.dg/uninit-6.c | 2 +- gcc/testsuite/gcc.dg/uninit-pr40943.c | 10 ++++++++++ gcc/tree-ssa.c | 7 ++++++- 6 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/uninit-pr40943.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 04816e3f0de..4d9d516f3ed 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 26560b505fe..e2b141cfd30 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 f4588305ffa..e3fefe5e1c5 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 009e124fccf..b0f2083ab4b 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 00000000000..2b6e9131cb1 --- /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 504491040b4..28da94bb21c 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)) { -- 2.11.0