aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.dg/uninit-6-O0.c2
-rw-r--r--gcc/testsuite/gcc.dg/uninit-6.c2
-rw-r--r--gcc/testsuite/gcc.dg/uninit-pr40943.c10
-rw-r--r--gcc/tree-ssa.c7
6 files changed, 31 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 04816e3..4d9d516 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-08-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/40943
+ * tree-ssa.c (warn_uninitialized_var): Even on LHS warn for
+ operand of INDIRECT_REF.
+
2009-08-03 Uros Bizjak <ubizjak@gmail.com>
* config/alpha/alpha.c (alpha_legitimate_constant_p): Reject CONST
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 26560b5..e2b141c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2009-08-03 Jakub Jelinek <jakub@redhat.com>
+
+ 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 <dave.anglin@nrc-cnrc.gc.ca>
PR testsuite/40858
diff --git a/gcc/testsuite/gcc.dg/uninit-6-O0.c b/gcc/testsuite/gcc.dg/uninit-6-O0.c
index f458830..e3fefe5 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 009e124..b0f2083 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 0000000..2b6e913
--- /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 5044910..28da94b 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))
{