summaryrefslogtreecommitdiff
path: root/gcc/c-pretty-print.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-12-05 22:10:16 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2008-12-05 22:10:16 +0100
commit5eddced53a0b1a080297ae5420768750ae9e282d (patch)
treecee1b2906941519dc567d0b6dc148a9e80a5d21b /gcc/c-pretty-print.c
parent4f809983df5aff0181c6780a68a3d9359bc331db (diff)
downloadgcc-5eddced53a0b1a080297ae5420768750ae9e282d.tar.gz
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
Diffstat (limited to 'gcc/c-pretty-print.c')
-rw-r--r--gcc/c-pretty-print.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c
index 9ee2738ca82..cf1c6c3f52c 100644
--- a/gcc/c-pretty-print.c
+++ b/gcc/c-pretty-print.c
@@ -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: