aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/opt/pr17411-1.C21
-rw-r--r--gcc/tree-sra.c2
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);