From aee91ff0bdb624e4a90149b035413be2cd1d6db9 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Wed, 10 Dec 2008 17:20:50 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/torture/pr38271.c | 18 ++++++++++++++++++ gcc/tree-sra.c | 9 ++++++--- 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr38271.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 57a235a85025..a32639ef97d7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-12-10 Alexandre Oliva + + 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 PR target/37668 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 713333a92bed..4fa8dc236605 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-12-10 Alexandre Oliva + + PR middle-end/38271 + * gcc.dg/torture/pr38271.c: New. + 2008-12-10 Ira Rosen 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 000000000000..2c64a9b34a62 --- /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 aa1619364102..01c0e121e003 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 -- 2.47.2