On Tue, Aug 1, 2023 at 2:36 AM Patrick Palka via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > Tested on x86_64-pc-linux-gnu, does this look OK for trunk? > > -- >8 -- > > In the C++ front end, a COMPONENT_REF's second operand isn't always a > decl (at least at template parse time). This patch makes the generic > pretty printer not ICE when printing such a COMPONENT_REF. > > gcc/ChangeLog: > > * tree-pretty-print.cc (dump_generic_node) <case COMPONENT_REF>: > Don't call component_ref_field_offset if the RHS isn't a decl. > --- > gcc/tree-pretty-print.cc | 16 +++++++++------- > 1 file changed, 9 insertions(+), 7 deletions(-) > > diff --git a/gcc/tree-pretty-print.cc b/gcc/tree-pretty-print.cc > index 25d191b10fd..da8dd002a3b 100644 > --- a/gcc/tree-pretty-print.cc > +++ b/gcc/tree-pretty-print.cc > @@ -2482,14 +2482,16 @@ dump_generic_node (pretty_printer *pp, tree node, int > spc, dump_flags_t flags, > if (op_prio (op0) < op_prio (node)) > pp_right_paren (pp); > pp_string (pp, str); > - dump_generic_node (pp, TREE_OPERAND (node, 1), spc, flags, false); > - op0 = component_ref_field_offset (node); > - if (op0 && TREE_CODE (op0) != INTEGER_CST) > - { > - pp_string (pp, "{off: "); > - dump_generic_node (pp, op0, spc, flags, false); > + op1 = TREE_OPERAND (node, 1); > + dump_generic_node (pp, op1, spc, flags, false); > + if (DECL_P (op1))
OK if you add a comment before this test. > + if (tree off = component_ref_field_offset (node)) > + if (TREE_CODE (off) != INTEGER_CST) > + { > + pp_string (pp, "{off: "); > + dump_generic_node (pp, off, spc, flags, false); > pp_right_brace (pp); > - } > + } > break; > > case BIT_FIELD_REF: > -- > 2.41.0.478.gee48e70a82 >