+2009-01-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/36254
+ * cp-gimplify.c (genericize_if_stmt): Renamed from ...
+ (gimplify_if_stmt): ... this.
+ (cp_gimplify_expr): Don't handle IF_STMT here.
+ (cp_genericize_r): Call genericize_if_stmt for IF_STMT.
+
2009-01-10 Andrew Pinski <pinskia@gmail.com>
PR c++/38648
/* C++-specific tree lowering bits; see also c-gimplify.c and tree-gimple.c.
- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
Free Software Foundation, Inc.
Contributed by Jason Merrill <jason@redhat.com>
/* Genericize an IF_STMT by turning it into a COND_EXPR. */
static void
-gimplify_if_stmt (tree *stmt_p)
+genericize_if_stmt (tree *stmt_p)
{
tree stmt, cond, then_, else_;
location_t locus = EXPR_LOCATION (*stmt_p);
ret = GS_ALL_DONE;
break;
- case IF_STMT:
- gimplify_if_stmt (expr_p);
- ret = GS_OK;
- break;
-
case FOR_STMT:
gimplify_for_stmt (expr_p, pre_p);
ret = GS_OK;
CLEANUP_BODY (stmt),
CLEANUP_EXPR (stmt));
+ else if (TREE_CODE (stmt) == IF_STMT)
+ {
+ genericize_if_stmt (stmt_p);
+ /* *stmt_p has changed, tail recurse to handle it again. */
+ return cp_genericize_r (stmt_p, walk_subtrees, data);
+ }
+
/* COND_EXPR might have incompatible types in branches if one or both
arms are bitfields. Fix it up now. */
else if (TREE_CODE (stmt) == COND_EXPR)