aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-09-05 15:15:16 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-09-05 15:15:16 +0000
commit432b4b3129cd15f0971a0bbc9c1518d96ea6a4ae (patch)
tree7fdf591534a02feeaf7c1ad761bf7bab13b700f6 /gcc
parent575140c2f29ee35893f4551ca20f15a587c1727b (diff)
downloadgcc-432b4b3129cd15f0971a0bbc9c1518d96ea6a4ae.zip
gcc-432b4b3129cd15f0971a0bbc9c1518d96ea6a4ae.tar.gz
gcc-432b4b3129cd15f0971a0bbc9c1518d96ea6a4ae.tar.bz2
re PR c++/41273 (ICE in add_virtual_operand, at tree-ssa-operands.c:638)
2009-09-05 Richard Guenther <rguenther@suse.de> PR debug/41273 * tree-ssa-operands.c (get_tmr_operands): Pass through opf_no_vops. * g++.dg/torture/pr41273.C: New testcase. From-SVN: r151454
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr41273.C18
-rw-r--r--gcc/tree-ssa-operands.c4
4 files changed, 30 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a8c927f..9f2b748 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2009-09-05 Richard Guenther <rguenther@suse.de>
+ PR debug/41273
+ * tree-ssa-operands.c (get_tmr_operands): Pass through opf_no_vops.
+
+2009-09-05 Richard Guenther <rguenther@suse.de>
+
PR middle-end/41271
* tree-ssa.c (useless_type_conversion_p): Drop qualifiers
before comparing function argument types.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cd46171..3373d07 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-09-05 Richard Guenther <rguenther@suse.de>
+
+ PR debug/41273
+ * g++.dg/torture/pr41273.C: New testcase.
+
2009-09-05 Paul Thomas <pault@gcc.gnu.org>
PR fortran/41258
diff --git a/gcc/testsuite/g++.dg/torture/pr41273.C b/gcc/testsuite/g++.dg/torture/pr41273.C
new file mode 100644
index 0000000..bdce053
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr41273.C
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-g" } */
+
+long *H2_ipX_ener_sort;
+double H2_old_populations[2];
+double H2_total;
+
+void H2_LevelPops()
+{
+ double sum_pop = 0.;
+ long nEner = 0;
+ while( nEner < 3 && sum_pop/H2_total < 0.99999 )
+ {
+ long ip = H2_ipX_ener_sort[nEner];
+ sum_pop += H2_old_populations[ip];
+ ++nEner;
+ }
+}
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index ac84fb9..16f4a43 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -735,8 +735,8 @@ static void
get_tmr_operands (gimple stmt, tree expr, int flags)
{
/* First record the real operands. */
- get_expr_operands (stmt, &TMR_BASE (expr), opf_use);
- get_expr_operands (stmt, &TMR_INDEX (expr), opf_use);
+ get_expr_operands (stmt, &TMR_BASE (expr), opf_use | (flags & opf_no_vops));
+ get_expr_operands (stmt, &TMR_INDEX (expr), opf_use | (flags & opf_no_vops));
if (TMR_SYMBOL (expr))
mark_address_taken (TMR_SYMBOL (expr));