Commit d767aebf by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/37819 (ice for bitfield code)

	PR c++/37819
	* cp-gimplify.c (cp_genericize_r): Only fold_convert COND_EXPR
	arguments if they don't already have COND_EXPR's type.

	* g++.dg/expr/bitfield11.C: New test.

From-SVN: r141118
parent 5c0a2e3a
2008-10-14 Jakub Jelinek <jakub@redhat.com>
PR c++/37819
* cp-gimplify.c (cp_genericize_r): Only fold_convert COND_EXPR
arguments if they don't already have COND_EXPR's type.
2008-10-14 Paolo Carlini <paolo.carlini@oracle.com> 2008-10-14 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/37650 PR c++/37650
......
...@@ -815,14 +815,18 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) ...@@ -815,14 +815,18 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
= (TREE_OPERAND (stmt, 2) = (TREE_OPERAND (stmt, 2)
? is_bitfield_expr_with_lowered_type (TREE_OPERAND (stmt, 2)) ? is_bitfield_expr_with_lowered_type (TREE_OPERAND (stmt, 2))
: NULL_TREE); : NULL_TREE);
if (type_left) if (type_left
&& !useless_type_conversion_p (TREE_TYPE (stmt),
TREE_TYPE (TREE_OPERAND (stmt, 1))))
{ {
TREE_OPERAND (stmt, 1) TREE_OPERAND (stmt, 1)
= fold_convert (type_left, TREE_OPERAND (stmt, 1)); = fold_convert (type_left, TREE_OPERAND (stmt, 1));
gcc_assert (useless_type_conversion_p (TREE_TYPE (stmt), gcc_assert (useless_type_conversion_p (TREE_TYPE (stmt),
type_left)); type_left));
} }
if (type_right) if (type_right
&& !useless_type_conversion_p (TREE_TYPE (stmt),
TREE_TYPE (TREE_OPERAND (stmt, 2))))
{ {
TREE_OPERAND (stmt, 2) TREE_OPERAND (stmt, 2)
= fold_convert (type_right, TREE_OPERAND (stmt, 2)); = fold_convert (type_right, TREE_OPERAND (stmt, 2));
......
2008-10-14 Jakub Jelinek <jakub@redhat.com>
PR c++/37819
* g++.dg/expr/bitfield11.C: New test.
2008-10-14 Paolo Carlini <paolo.carlini@oracle.com> 2008-10-14 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/37650 PR c++/37650
......
// PR c++/37819
// { dg-do compile }
struct A
{
unsigned int a : 1;
};
bool
foo (A *x, A *y)
{
x->a = y ? y->a : true;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment