re PR other/5746 (0220 cvs crashes using undeclared type)

PR other/5746
	* semantics.c (finish_switch_cond): Don't call get_unwidened
	if error_mark_node.

From-SVN: r49969
This commit is contained in:
Jakub Jelinek 2002-02-22 18:42:19 +01:00 committed by Jakub Jelinek
parent 00c2f96f89
commit 25c8b645ed
2 changed files with 17 additions and 10 deletions

@ -1,3 +1,9 @@
2002-02-22 Jakub Jelinek <jakub@redhat.com>
PR other/5746
* semantics.c (finish_switch_cond): Don't call get_unwidened
if error_mark_node.
2002-02-22 Nathan Sidwell <nathan@codesourcery.com>
PR c++/2645, DR 295

@ -516,7 +516,6 @@ finish_switch_cond (cond, switch_stmt)
tree orig_type = NULL;
if (!processing_template_decl)
{
tree type;
tree index;
/* Convert the condition to an integer or enumeration type. */
@ -533,15 +532,17 @@ finish_switch_cond (cond, switch_stmt)
cond = fold (build1 (CLEANUP_POINT_EXPR, TREE_TYPE (cond), cond));
}
type = TREE_TYPE (cond);
index = get_unwidened (cond, NULL_TREE);
/* We can't strip a conversion from a signed type to an unsigned,
because if we did, int_fits_type_p would do the wrong thing
when checking case values for being in range,
and it's too hard to do the right thing. */
if (TREE_UNSIGNED (TREE_TYPE (cond))
== TREE_UNSIGNED (TREE_TYPE (index)))
cond = index;
if (cond != error_mark_node)
{
index = get_unwidened (cond, NULL_TREE);
/* We can't strip a conversion from a signed type to an unsigned,
because if we did, int_fits_type_p would do the wrong thing
when checking case values for being in range,
and it's too hard to do the right thing. */
if (TREE_UNSIGNED (TREE_TYPE (cond))
== TREE_UNSIGNED (TREE_TYPE (index)))
cond = index;
}
}
FINISH_COND (cond, switch_stmt, SWITCH_COND (switch_stmt));
SWITCH_TYPE (switch_stmt) = orig_type;