[v2] c++: improve print_node of PTRMEM_CST

Message ID 1ac72e5d-bb8f-76c6-eac1-b78ff6d71c20@redhat.com
State New
Headers
Series [v2] c++: improve print_node of PTRMEM_CST |

Commit Message

Jason Merrill Nov. 16, 2021, 3:14 p.m. UTC
  On 11/4/21 16:32, Jakub Jelinek wrote:
> On Thu, Nov 04, 2021 at 11:52:34AM -0400, Jason Merrill via Gcc-patches wrote:
>> It's been inconvenient that pretty-printing of PTRMEM_CST didn't display
>> what member the constant refers to.
>>
>> Adding that is complicated by the absence of a langhook for CONSTANT_CLASS_P
>> nodes; the simplest fix for that is to use the tcc_exceptional hook for
>> tcc_constant as well.
>>
>> Tested x86_64-pc-linux-gnu.  OK for trunk, or should I add a new hook for
>> constants?
>>
>> gcc/cp/ChangeLog:
>>
>> 	* ptree.c (cxx_print_xnode): Handle PTRMEM_CST.
>>
>> gcc/ChangeLog:
>>
>> 	* print-tree.c (print_node): Also call print_xnode hook for
>> 	tcc_constant class.
> 
> I think using the same langhook is fine, but in that case certainly
>    /* Called by print_tree when there is a tree of class tcc_exceptional
>       that it doesn't know how to display.  */
> should be adjusted so that it mentions also tcc_constant.

Done.

> And maybe rename it from print_xnode to print_node?

I think changing the comment is enough, it's still just exceptional and 
constant.

This is what I'm pushing:
  

Patch

From 761b128dbfa2fbc1f1a0138160a39db95db7759a Mon Sep 17 00:00:00 2001
From: Jason Merrill <jason@redhat.com>
Date: Fri, 29 Oct 2021 16:39:01 -0400
Subject: [PATCH] c++: improve print_node of PTRMEM_CST
To: gcc-patches@gcc.gnu.org

It's been inconvenient that pretty-printing of PTRMEM_CST didn't display
what member the constant refers to.

Adding that is complicated by the absence of a langhook for CONSTANT_CLASS_P
nodes; the simplest fix for that is to use the tcc_exceptional hook for
tcc_constant as well.

gcc/cp/ChangeLog:

	* ptree.c (cxx_print_xnode): Handle PTRMEM_CST.

gcc/ChangeLog:

	* langhooks.h (struct lang_hooks): Adjust comment.
	* print-tree.c (print_node): Also call print_xnode hook for
	tcc_constant class.
---
 gcc/langhooks.h  | 2 +-
 gcc/cp/ptree.c   | 3 +++
 gcc/print-tree.c | 3 +--
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/gcc/langhooks.h b/gcc/langhooks.h
index 3e89134e8b4..3db8f2a550d 100644
--- a/gcc/langhooks.h
+++ b/gcc/langhooks.h
@@ -477,7 +477,7 @@  struct lang_hooks
   void (*print_statistics) (void);
 
   /* Called by print_tree when there is a tree of class tcc_exceptional
-     that it doesn't know how to display.  */
+     or tcc_constant that it doesn't know how to display.  */
   lang_print_tree_hook print_xnode;
 
   /* Called to print language-dependent parts of tcc_decl, tcc_type,
diff --git a/gcc/cp/ptree.c b/gcc/cp/ptree.c
index ca7884db39b..d514aa2cad2 100644
--- a/gcc/cp/ptree.c
+++ b/gcc/cp/ptree.c
@@ -379,6 +379,9 @@  cxx_print_xnode (FILE *file, tree node, int indent)
       if (tree message = STATIC_ASSERT_MESSAGE (node))
 	print_node (file, "message", message, indent+4);
       break;
+    case PTRMEM_CST:
+      print_node (file, "member", PTRMEM_CST_MEMBER (node), indent+4);
+      break;
     default:
       break;
     }
diff --git a/gcc/print-tree.c b/gcc/print-tree.c
index d1fbd044c27..b5dc523fcb1 100644
--- a/gcc/print-tree.c
+++ b/gcc/print-tree.c
@@ -1004,8 +1004,7 @@  print_node (FILE *file, const char *prefix, tree node, int indent,
 	  break;
 
 	default:
-	  if (EXCEPTIONAL_CLASS_P (node))
-	    lang_hooks.print_xnode (file, node, indent);
+	  lang_hooks.print_xnode (file, node, indent);
 	  break;
 	}
 
-- 
2.27.0