From f3e4d63c924af4eab9bacf989db3d5187ca316ab Mon Sep 17 00:00:00 2001
From: Jason Merrill <jason@yorick.cygnus.com>
Date: Mon, 9 Aug 1999 02:30:21 +0000
Subject: [PATCH] ptree.c (print_lang_type): Print the real type of a PMF.

	* ptree.c (print_lang_type): Print the real type of a PMF.
	Print what exceptions a fn type throws.

	* typeck.c (common_type): Use same_type_p.

And revert:
	* decl.c (bad_specifiers): It's OK to have an EH spec on a function
	pointer.

From-SVN: r28609
---
 gcc/cp/ChangeLog | 10 +++++++---
 gcc/cp/decl.c    |  2 +-
 gcc/cp/ptree.c   | 22 ++++++++++++++++++++--
 gcc/cp/typeck.c  |  2 +-
 4 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 0e0b5a57ea9d..41037ae68994 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+1999-08-08  Jason Merrill  <jason@yorick.cygnus.com>
+
+	* ptree.c (print_lang_type): Print the real type of a PMF.
+	Print what exceptions a fn type throws.
+
+	* typeck.c (common_type): Use same_type_p.
+
 1999-08-07  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* class.c (count_fields, add_fields_to_vec): Add static prototype.
@@ -37,9 +44,6 @@
 
 1999-08-06  Jason Merrill  <jason@yorick.cygnus.com>
 
-	* decl.c (bad_specifiers): It's OK to have an EH spec on a function
-	pointer.
-
 	* pt.c (maybe_get_template_decl_from_type_decl): Make sure that
 	we're looking at a class.
 
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 83e408e9d963..27f915c65ce8 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -8363,7 +8363,7 @@ bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
 	      object, type);
   if (friendp)
     cp_error_at ("`%D' declared as a friend", object);
-  if (raises && ! TYPE_PTRFN_P (TREE_TYPE (object)))
+  if (raises)
     cp_error_at ("`%D' declared with an exception specification", object);
 }
 
diff --git a/gcc/cp/ptree.c b/gcc/cp/ptree.c
index 3c8486425fd8..0f7a7cba9b1d 100644
--- a/gcc/cp/ptree.c
+++ b/gcc/cp/ptree.c
@@ -73,9 +73,10 @@ print_lang_type (file, node, indent)
      register tree node;
      int indent;
 {
-  if (TREE_CODE (node) == TEMPLATE_TYPE_PARM
-      || TREE_CODE (node) == TEMPLATE_TEMPLATE_PARM)
+  switch (TREE_CODE (node))
     {
+    case TEMPLATE_TYPE_PARM:
+    case TEMPLATE_TEMPLATE_PARM:
       indent_to (file, indent + 3);
       fputs ("index ", file);
       fprintf (file, HOST_WIDE_INT_PRINT_DEC, TEMPLATE_TYPE_IDX (node));
@@ -84,8 +85,25 @@ print_lang_type (file, node, indent)
       fputs (" orig_level ", file);
       fprintf (file, HOST_WIDE_INT_PRINT_DEC, TEMPLATE_TYPE_ORIG_LEVEL (node));
       return;
+
+    case FUNCTION_TYPE:
+    case METHOD_TYPE:
+      if (TYPE_RAISES_EXCEPTIONS (node))
+	print_node (file, "throws", TYPE_RAISES_EXCEPTIONS (node), indent + 4);
+      return;
+
+    case RECORD_TYPE:
+    case UNION_TYPE:
+      break;
+
+    default:
+      return;
     }
 
+  if (TYPE_PTRMEMFUNC_P (node))
+    print_node (file, "ptrmemfunc fn type", TYPE_PTRMEMFUNC_FN_TYPE (node),
+		indent + 4);
+
   if (! CLASS_TYPE_P (node))
     return;
 
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 991234c5678b..87245484eca3 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -699,7 +699,7 @@ common_type (t1, t2)
 	tt1 = TYPE_MAIN_VARIANT (tt1);
 	tt2 = TYPE_MAIN_VARIANT (tt2);
 
-	if (tt1 == tt2)
+	if (same_type_p (tt1, tt2))
 	  target = tt1;
 	else if (b1)
 	  {
-- 
GitLab