aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2008-12-10 17:20:50 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2008-12-10 17:20:50 +0000
commitaee91ff0bdb624e4a90149b035413be2cd1d6db9 (patch)
tree99930ce8db4d328a4055eff0144cb0036904bb01 /gcc
parent7ce8451d98680124fe012365631ca51d430e9b40 (diff)
downloadgcc-aee91ff0bdb624e4a90149b035413be2cd1d6db9.zip
gcc-aee91ff0bdb624e4a90149b035413be2cd1d6db9.tar.gz
gcc-aee91ff0bdb624e4a90149b035413be2cd1d6db9.tar.bz2
re PR middle-end/38271 (Spurious / missing "... used uninitialized in this function" warning)
gcc/ChangeLog: PR middle-end/38271 * tree-sra.c (sra_build_bf_assignment): Avoid warnings for variables initialized from SRAed bit fields. gcc/testsuite/ChangeLog: PR middle-end/38271 * gcc.dg/torture/pr38271.c: New. From-SVN: r142651
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr38271.c18
-rw-r--r--gcc/tree-sra.c9
4 files changed, 35 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 57a235a..a32639e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-12-10 Alexandre Oliva <aoliva@redhat.com>
+
+ PR middle-end/38271
+ * tree-sra.c (sra_build_bf_assignment): Avoid warnings for
+ variables initialized from SRAed bit fields.
+
2008-12-10 Martin Guy <martinwguy@yahoo.it>
PR target/37668
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 713333a..4fa8dc2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-12-10 Alexandre Oliva <aoliva@redhat.com>
+
+ PR middle-end/38271
+ * gcc.dg/torture/pr38271.c: New.
+
2008-12-10 Ira Rosen <irar@il.ibm.com>
PR tree-optimization/37416
diff --git a/gcc/testsuite/gcc.dg/torture/pr38271.c b/gcc/testsuite/gcc.dg/torture/pr38271.c
new file mode 100644
index 0000000..2c64a9b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr38271.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-Wuninitialized" } */
+
+struct xxx {
+ short a;
+ short b;
+ void *c;
+};
+
+void bar(struct xxx);
+
+void foo(struct xxx *p, int i)
+{
+ struct xxx s0 = *p;
+ struct xxx s = s0;
+ if (s.a) i++;
+ bar(s);
+}
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index aa16193..01c0e12 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -2354,14 +2354,17 @@ sra_build_bf_assignment (tree dst, tree src)
tmp = var;
if (!is_gimple_variable (tmp))
tmp = unshare_expr (var);
+ else
+ TREE_NO_WARNING (var) = true;
tmp2 = make_rename_temp (utype, "SR");
if (INTEGRAL_TYPE_P (TREE_TYPE (var)))
- stmt = gimple_build_assign (tmp2, fold_convert (utype, tmp));
+ tmp = fold_convert (utype, tmp);
else
- stmt = gimple_build_assign (tmp2, fold_build1 (VIEW_CONVERT_EXPR,
- utype, tmp));
+ tmp = fold_build1 (VIEW_CONVERT_EXPR, utype, tmp);
+
+ stmt = gimple_build_assign (tmp2, tmp);
gimple_seq_add_stmt (&seq, stmt);
}
else