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:
parent
00c2f96f89
commit
25c8b645ed
gcc/cp
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user