*** empty log message ***
[binutils-gdb.git] / gdb / c-typeprint.c
index f7a305cead02c7074877162ea9445190dd5996e2..926ae2fc5ef329f656d4d4600e1b88a7210b8d34 100644 (file)
@@ -768,7 +768,8 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
          cp_type_print_derivation_info (stream, type);
 
          fprintf_filtered (stream, "{\n");
-         if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0))
+         if (TYPE_NFIELDS (type) == 0 && TYPE_NFN_FIELDS (type) == 0
+             && TYPE_TYPEDEF_FIELD_COUNT (type) == 0)
            {
              if (TYPE_STUB (type))
                fprintfi_filtered (level + 4, stream, _("<incomplete type>\n"));
@@ -1058,6 +1059,29 @@ c_type_print_base (struct type *type, struct ui_file *stream, int show,
                }
            }
 
+         /* Print typedefs defined in this class.  */
+
+         if (TYPE_TYPEDEF_FIELD_COUNT (type) != 0)
+           {
+             if (TYPE_NFIELDS (type) != 0 || TYPE_NFN_FIELDS (type) != 0)
+               fprintf_filtered (stream, "\n");
+
+             for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); i++)
+               {
+                 struct type *target = TYPE_TYPEDEF_FIELD_TYPE (type, i);
+
+                 /* Dereference the typedef declaration itself.  */
+                 gdb_assert (TYPE_CODE (target) == TYPE_CODE_TYPEDEF);
+                 target = TYPE_TARGET_TYPE (target);
+
+                 print_spaces_filtered (level + 4, stream);
+                 fprintf_filtered (stream, "typedef ");
+                 c_print_type (target, TYPE_TYPEDEF_FIELD_NAME (type, i),
+                               stream, show - 1, level + 4);
+                 fprintf_filtered (stream, ";\n");
+               }
+           }
+
          fprintfi_filtered (level, stream, "}");
 
          if (TYPE_LOCALTYPE_PTR (type) && show >= 0)