diff options
| author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-01-28 09:36:41 +0000 |
|---|---|---|
| committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-01-28 09:36:41 +0000 |
| commit | a98de126cfd13cabfca02b8238374bb2cd8b6f0f (patch) | |
| tree | 0ea4a6e8018d544e307c69cbc79066acedd3d492 | |
| parent | 7f70ef195ca477c04bab61f98b141cb00f8313d1 (diff) | |
| download | ppe42-gcc-a98de126cfd13cabfca02b8238374bb2cd8b6f0f.tar.gz ppe42-gcc-a98de126cfd13cabfca02b8238374bb2cd8b6f0f.zip | |
2009-01-28 Richard Guenther <rguenther@suse.de>
PR middle-end/38908
* tree-ssa.c (warn_uninitialized_var): Do not warn for seemingly
uninitialized aggregate uses in call arguments.
* g++.dg/warn/Wuninitialized-2.C: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@143722 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/warn/Wuninitialized-2.C | 53 | ||||
| -rw-r--r-- | gcc/tree-ssa.c | 6 |
4 files changed, 69 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2727cc2ff23..88de5d2c5ab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-01-28 Richard Guenther <rguenther@suse.de> + + PR middle-end/38908 + * tree-ssa.c (warn_uninitialized_var): Do not warn for seemingly + uninitialized aggregate uses in call arguments. + 2009-01-28 Paolo Bonzini <bonzini@gnu.org> PR tree-optimization/38984 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7721a56f2bf..2db69bee90c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-01-28 Richard Guenther <rguenther@suse.de> + + PR middle-end/38908 + * g++.dg/warn/Wuninitialized-2.C: New testcase. + 2009-01-28 Paolo Bonzini <bonzini@gnu.org> PR tree-optimization/38984 diff --git a/gcc/testsuite/g++.dg/warn/Wuninitialized-2.C b/gcc/testsuite/g++.dg/warn/Wuninitialized-2.C new file mode 100644 index 00000000000..2b6f9253012 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wuninitialized-2.C @@ -0,0 +1,53 @@ +/* { dg-do compile } */ +/* { dg-options "-O -Wuninitialized" } */ + +struct S8 { template<typename T> S8(T) { } }; + +template<typename T> struct S10; +template<typename T> struct S10<T()> { typedef T S12; typedef S8 S1(); }; + +template<typename T> struct S3 { }; +template<typename T> struct S11 { S11(S3<T>); }; + +struct S2 +{ + template<typename T> operator S11<T>() { return S11<T>(S5<T>()); } + template<typename T> struct S5:public S3<T> + { + virtual typename S10<T>::S12 S13() { + return 0; + } + }; +}; + +template<typename T> S11<T> S6(S3<T>) { return S11<T>(S3<T>()); } +template<typename S12> struct S7 { typedef S12 S15(); }; + +struct S4 +{ + template<typename T> operator S11<T>() + { + struct S14:public S3<T> + { + S14(S2 x):S11_(x) { } + S11<typename S7<typename S10<T>::S12>::S15> S11_; + }; + return S6(S14(S11_)); + } + S2 S11_; +}; + +struct S9 +{ + template<typename F> operator S11<F>() { return S11<F>(S14<F>(S11_)); } + template<typename F> struct S14:public S3<F> + { + S14(S4 x):S11_(x) { } + S11<typename S10<F>::S1> S11_; + }; + S4 S11_; +}; + +void S15(S11<void()>); +void S16() { S9 x; S15(x); } + diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 91cbc195001..75e4685149f 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1496,9 +1496,13 @@ warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data_) || !gimple_aliases_computed_p (cfun)) return NULL_TREE; + /* If the load happens as part of a call do not warn about it. */ + if (is_gimple_call (data->stmt)) + return NULL_TREE; + vuse = SINGLE_SSA_USE_OPERAND (data->stmt, SSA_OP_VUSE); if (vuse == NULL_USE_OPERAND_P) - return NULL_TREE; + return NULL_TREE; op = USE_FROM_PTR (vuse); if (t != SSA_NAME_VAR (op) |

