This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] gdbtypes.c (copy_type_recursive): Handle all TYPE_SPECIFIC_FIELD kinds.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=f6b3afbf2fce69c31bd738e0543c55fbd848e74a

commit f6b3afbf2fce69c31bd738e0543c55fbd848e74a
Author: Doug Evans <xdje42@gmail.com>
Date:   Sat Jan 31 21:13:02 2015 -0800

    gdbtypes.c (copy_type_recursive): Handle all TYPE_SPECIFIC_FIELD kinds.
    
    gdb/ChangeLog:
    
    	* gdbtypes.c (copy_type_recursive): Handle all TYPE_SPECIFIC_FIELD
    	kinds.

Diff:
---
 gdb/ChangeLog  |  5 +++++
 gdb/gdbtypes.c | 29 +++++++++++++++++++++++------
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e88cd57..46b94c3 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-31  Doug Evans  <xdje42@gmail.com>
+
+	* gdbtypes.c (copy_type_recursive): Handle all TYPE_SPECIFIC_FIELD
+	kinds.
+
 2015-01-31  Gary Benson <gbenson@redhat.com>
 	    Doug Evans  <dje@google.com>
 
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index e6e402e..0c34e62 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -4217,18 +4217,35 @@ copy_type_recursive (struct objfile *objfile,
       copy_type_recursive (objfile,
 			   TYPE_VPTR_BASETYPE (type),
 			   copied_types);
+
   /* Maybe copy the type_specific bits.
 
      NOTE drow/2005-12-09: We do not copy the C++-specific bits like
      base classes and methods.  There's no fundamental reason why we
      can't, but at the moment it is not needed.  */
 
-  if (TYPE_CODE (type) == TYPE_CODE_FLT)
-    TYPE_FLOATFORMAT (new_type) = TYPE_FLOATFORMAT (type);
-  else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
-	   || TYPE_CODE (type) == TYPE_CODE_UNION
-	   || TYPE_CODE (type) == TYPE_CODE_NAMESPACE)
-    INIT_CPLUS_SPECIFIC (new_type);
+  switch (TYPE_SPECIFIC_FIELD (type))
+    {
+    case TYPE_SPECIFIC_NONE:
+      break;
+    case TYPE_SPECIFIC_FUNC:
+      INIT_FUNC_SPECIFIC (new_type);
+      TYPE_CALLING_CONVENTION (new_type) = TYPE_CALLING_CONVENTION (type);
+      TYPE_NO_RETURN (new_type) = TYPE_NO_RETURN (type);
+      TYPE_TAIL_CALL_LIST (new_type) = NULL;
+      break;
+    case TYPE_SPECIFIC_FLOATFORMAT:
+      TYPE_FLOATFORMAT (new_type) = TYPE_FLOATFORMAT (type);
+      break;
+    case TYPE_SPECIFIC_CPLUS_STUFF:
+      INIT_CPLUS_SPECIFIC (new_type);
+      break;
+    case TYPE_SPECIFIC_GNAT_STUFF:
+      INIT_GNAT_SPECIFIC (new_type);
+      break;
+    default:
+      gdb_assert_not_reached ("bad type_specific_kind");
+    }
 
   return new_type;
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]