]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-pretty-print: handle COMPONENT_REF with non-decl RHS
authorPatrick Palka <ppalka@redhat.com>
Fri, 11 Aug 2023 16:17:24 +0000 (12:17 -0400)
committerPatrick Palka <ppalka@redhat.com>
Fri, 11 Aug 2023 16:17:24 +0000 (12:17 -0400)
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

index 25d191b10fd7e2a7e469c415398c615cb5a32b6b..51a213529d19c75fff4648e81216e69036032c96 100644 (file)
@@ -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)) /* Not always a decl in the C++ FE.  */
+       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: