re PR c++/35336 (Broken diagnostic: 'bit_field_ref' not supported by dump_expr)

PR c++/35336
	* c-pretty-print.c (pp_c_postfix_expression): Handle BIT_FIELD_REF.
	(pp_c_expression): Likewise.

	* error.c (dump_expr): Handle BIT_FIELD_REF.

	* g++.dg/other/error30.C: New test.

From-SVN: r142497
This commit is contained in:
Jakub Jelinek 2008-12-05 22:10:16 +01:00 committed by Jakub Jelinek
parent 4f809983df
commit 5eddced53a
6 changed files with 62 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2008-12-05 Jakub Jelinek <jakub@redhat.com>
PR c++/35336
* c-pretty-print.c (pp_c_postfix_expression): Handle BIT_FIELD_REF.
(pp_c_expression): Likewise.
2008-12-05 Michael Meissner <meissner@linux.vnet.ibm.com>
PR c/38416

View File

@ -1444,6 +1444,36 @@ pp_c_postfix_expression (c_pretty_printer *pp, tree e)
}
break;
case BIT_FIELD_REF:
{
tree type = TREE_TYPE (e);
type = signed_or_unsigned_type_for (TYPE_UNSIGNED (type), type);
if (type
&& tree_int_cst_equal (TYPE_SIZE (type), TREE_OPERAND (e, 1)))
{
HOST_WIDE_INT bitpos = tree_low_cst (TREE_OPERAND (e, 2), 0);
HOST_WIDE_INT size = tree_low_cst (TYPE_SIZE (type), 0);
if ((bitpos % size) == 0)
{
pp_c_left_paren (pp);
pp_c_left_paren (pp);
pp_type_id (pp, type);
pp_c_star (pp);
pp_c_right_paren (pp);
pp_c_ampersand (pp);
pp_expression (pp, TREE_OPERAND (e, 0));
pp_c_right_paren (pp);
pp_c_left_bracket (pp);
pp_wide_integer (pp, bitpos / size);
pp_c_right_bracket (pp);
break;
}
}
pp_unsupported_tree (pp, e);
}
break;
case COMPLEX_CST:
case VECTOR_CST:
pp_c_compound_literal (pp, e);
@ -1955,6 +1985,7 @@ pp_c_expression (c_pretty_printer *pp, tree e)
case ARRAY_REF:
case CALL_EXPR:
case COMPONENT_REF:
case BIT_FIELD_REF:
case COMPLEX_CST:
case COMPLEX_EXPR:
case VECTOR_CST:

View File

@ -1,3 +1,8 @@
2008-12-05 Jakub Jelinek <jakub@redhat.com>
PR c++/35336
* error.c (dump_expr): Handle BIT_FIELD_REF.
2008-12-05 Sebastian Pop <sebastian.pop@amd.com>
PR bootstrap/38262

View File

@ -2071,6 +2071,7 @@ dump_expr (tree t, int flags)
case UNEQ_EXPR:
case LTGT_EXPR:
case COMPLEX_EXPR:
case BIT_FIELD_REF:
pp_expression (cxx_pp, t);
break;

View File

@ -1,3 +1,8 @@
2008-12-05 Jakub Jelinek <jakub@redhat.com>
PR c++/35336
* g++.dg/other/error30.C: New test.
2008-12-05 Janis Johnson <janis187@us.ibm.com>
* lib/target-supports.exp (check_effective_target_hard_dfp): New.

View File

@ -0,0 +1,14 @@
// PR c++/35336
// { dg-do compile }
// { dg-bogus "not supported by" "" { target *-*-* } 0 }
struct A
{
int i : 2;
};
void foo (bool b)
{
A a;
(a.i || b) (); // { dg-error "cannot be used as" }
}