aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2004-09-11 23:44:21 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2004-09-11 23:44:21 +0000
commitec76a0e0bf0a01edee001700b107a4772051d4ba (patch)
tree0f19177b7e46d272f7ff9c2f948d1da7b4787c9e /gcc
parentd6a1dfd98b85ba31c58c4d0f3f53adb3dd0044f1 (diff)
downloadgcc-ec76a0e0bf0a01edee001700b107a4772051d4ba.zip
gcc-ec76a0e0bf0a01edee001700b107a4772051d4ba.tar.gz
gcc-ec76a0e0bf0a01edee001700b107a4772051d4ba.tar.bz2
re PR middle-end/17411 (ICE in immed_double_const)
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. * g++.dg/opt/pr17411-1.C: New test case. From-SVN: r87377
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);