aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2004-10-13 17:18:16 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2004-10-13 10:18:16 -0700
commitbcd46a7c659cd5e4883a54f491ba09e04934fefa (patch)
treeec81a075ec22d3d04595189790e1a9ae9f6d0a6f /gcc/cp
parent38467a0deb62fafa1b21a508bdb5862419207ce3 (diff)
downloadgcc-bcd46a7c659cd5e4883a54f491ba09e04934fefa.zip
gcc-bcd46a7c659cd5e4883a54f491ba09e04934fefa.tar.gz
gcc-bcd46a7c659cd5e4883a54f491ba09e04934fefa.tar.bz2
re PR c++/17661 (ICE in create_tmp_var)
2004-10-13 Andrew Pinski <pinskia@physics.uc.edu> PR c++/17661 * testsuite/g++.dg/expr/for2.C: New test. 2004-10-13 Andrew Pinski <pinskia@physics.uc.edu> PR c++/17661 * semantics.c (finish_for_expr): Convert expression to void so that we don't create temporaries for a?b:c. From-SVN: r88992
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c8
2 files changed, 14 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3e488ee..270a4eb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2004-10-13 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/17661
+ * semantics.c (finish_for_expr): Convert expression to void
+ so that we don't create temporaries for a?b:c.
+
2004-10-13 Kazu Hirata <kazu@cs.umass.edu>
* search.c: Fix a comment typo.
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index a417785..8a9cd42 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -798,6 +798,14 @@ finish_for_expr (tree expr, tree for_stmt)
cxx_incomplete_type_error (expr, TREE_TYPE (expr));
expr = error_mark_node;
}
+ if (!processing_template_decl)
+ {
+ if (warn_sequence_point)
+ verify_sequence_points (expr);
+ expr = convert_to_void (expr, "3rd expression in for");
+ }
+ else if (!type_dependent_expression_p (expr))
+ convert_to_void (build_non_dependent_expr (expr), "3rd expression in for");
expr = maybe_cleanup_point_expr_void (expr);
FOR_EXPR (for_stmt) = expr;
}