]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/38271 (Spurious / missing "... used uninitialized in this function...
authorAlexandre Oliva <aoliva@redhat.com>
Wed, 10 Dec 2008 17:20:50 +0000 (17:20 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Wed, 10 Dec 2008 17:20:50 +0000 (17:20 +0000)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr38271.c [new file with mode: 0644]
gcc/tree-sra.c

index 57a235a85025814d809f73ab5dde9f06806cd1ed..a32639ef97d749338f0c38b58d6f70f4b1ce0e1b 100644 (file)
@@ -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
index 713333a92bed40d1114c44ccea1536697a573d97..4fa8dc2366050ee31f0b2610dcfaa86e25173ff6 100644 (file)
@@ -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 (file)
index 0000000..2c64a9b
--- /dev/null
@@ -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);
+}
index aa161936410203ad8caa10f060f2ed1a97476d0d..01c0e121e0035351fc509e20570f25db0e08469f 100644 (file)
@@ -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