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
This commit is contained in:
parent
5c0a2e3ac5
commit
d767aebf70
@ -1,3 +1,9 @@
|
||||
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>
|
||||
|
||||
PR c++/37650
|
||||
|
@ -815,14 +815,18 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
|
||||
= (TREE_OPERAND (stmt, 2)
|
||||
? is_bitfield_expr_with_lowered_type (TREE_OPERAND (stmt, 2))
|
||||
: 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)
|
||||
= fold_convert (type_left, TREE_OPERAND (stmt, 1));
|
||||
gcc_assert (useless_type_conversion_p (TREE_TYPE (stmt),
|
||||
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)
|
||||
= fold_convert (type_right, TREE_OPERAND (stmt, 2));
|
||||
|
@ -1,3 +1,8 @@
|
||||
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>
|
||||
|
||||
PR c++/37650
|
||||
|
13
gcc/testsuite/g++.dg/expr/bitfield11.C
Normal file
13
gcc/testsuite/g++.dg/expr/bitfield11.C
Normal file
@ -0,0 +1,13 @@
|
||||
// PR c++/37819
|
||||
// { dg-do compile }
|
||||
|
||||
struct A
|
||||
{
|
||||
unsigned int a : 1;
|
||||
};
|
||||
|
||||
bool
|
||||
foo (A *x, A *y)
|
||||
{
|
||||
x->a = y ? y->a : true;
|
||||
}
|
Loading…
Reference in New Issue
Block a user