diff options
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/opt/pr17411-1.C | 21 | ||||
| -rw-r--r-- | gcc/tree-sra.c | 2 |
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 24b9efb..7316abd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-09-11 Roger Sayle <roger@eyesopen.com> + + PR middle-end/17411 + * tree-sra.c (generate_element_zero): Revert recent build_int_cst + change. elt->type may be a floating point type, so use fold_convert. + 2004-09-11 Geoffrey Keating <geoffk@apple.com> * config/darwin.c (machopic_validate_stub_or_non_lazy_ptr): Mark diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e48d301..c47b9f8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-09-11 Roger Sayle <roger@eyesopen.com> + + PR middle-end/17411 + * g++.dg/opt/pr17411-1.C: New test case. + 2004-09-11 Joseph S. Myers <jsm@polyomino.org.uk> * gcc.dg/declspec-4.c, gcc.dg/declspec-5.c, gcc.dg/declspec-6.c, diff --git a/gcc/testsuite/g++.dg/opt/pr17411-1.C b/gcc/testsuite/g++.dg/opt/pr17411-1.C new file mode 100644 index 0000000..62b57a5 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr17411-1.C @@ -0,0 +1,21 @@ +// PR middle-end/17411 +// { dg-do compile } +// { dg-options "-O2" } + +struct CalibData { + float mean_pedestal; +}; + +struct pair +{ + CalibData second; + pair(const CalibData& __b) : second(__b) { } +}; + +void insert(const pair& __x); + +void foo() +{ + insert(pair(CalibData())); +} + diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index b8ec2e1..cde865a 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -1534,7 +1534,7 @@ generate_element_zero (struct sra_elt *elt, tree *list_p) tree t; gcc_assert (elt->is_scalar); - t = build_int_cst (elt->type, 0); + t = fold_convert (elt->type, integer_zero_node); t = build (MODIFY_EXPR, void_type_node, elt->replacement, t); append_to_statement_list (t, list_p); |
