Re: [PATCH] tree-pretty-print: handle COMPONENT_REF with non-decl RHS

2023-08-02 Thread Richard Biener via Gcc-patches
On Tue, Aug 1, 2023 at 2:36 AM Patrick Palka via Gcc-patches
 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) :
> 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
>


[PATCH] tree-pretty-print: handle COMPONENT_REF with non-decl RHS

2023-07-31 Thread Patrick Palka via Gcc-patches
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) :
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))
+   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