From 8789d972a3124993fa585eac3474771e24e36edb Mon Sep 17 00:00:00 2001 From: Jim Kingdon Date: Mon, 24 May 1993 15:44:12 +0000 Subject: [PATCH] * c-typeprint.c (c_type_print_base): Don't print typedef'd names as struct, union, or enum tags. --- gdb/ChangeLog | 5 ++++ gdb/c-typeprint.c | 73 +++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 69 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e7f647dad2e..5d683063992 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +Mon May 24 10:01:10 1993 Jim Kingdon (kingdon@lioth.cygnus.com) + + * c-typeprint.c (c_type_print_base): Don't print typedef'd names + as struct, union, or enum tags. + Mon May 24 01:10:01 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * symmisc.c (dump_msymbols): Avoid gdb coredump with stripped diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c index 479d5d7c543..75913178bad 100644 --- a/gdb/c-typeprint.c +++ b/gdb/c-typeprint.c @@ -492,19 +492,66 @@ c_type_print_base (type, stream, show, level) break; case TYPE_CODE_STRUCT: - fprintf_filtered (stream, - HAVE_CPLUS_STRUCT (type) ? "class " : "struct "); + if (HAVE_CPLUS_STRUCT (type)) + { + /* Always print it as "class foo" even if foo is a typedef'd + name, not a tag. */ + fprintf_filtered (stream, "class "); + name = type_name_no_tag (type); + if (name != NULL) + { + fputs_filtered (name, stream); + fputs_filtered (" ", stream); + wrap_here (" "); + } + } + else + { + fprintf_filtered (stream, "struct "); + name = TYPE_NAME (type); + /* If the name does not start with "struct " it means that the + type was defined without a tag, so don't print a tag. It is + possible that we should have a better way of distinguising + tag names from typedef'd names. (e.g. a new tagname field in + the struct type). */ + if (strncmp (name, "struct ", 7) == 0) + { + fputs_filtered (name + 7, stream); + fputs_filtered (" ", stream); + } + } goto struct_union; case TYPE_CODE_UNION: fprintf_filtered (stream, "union "); - struct_union: - if ((name = type_name_no_tag (type)) != NULL) + if (HAVE_CPLUS_STRUCT (type)) { - fputs_filtered (name, stream); - fputs_filtered (" ", stream); - wrap_here (" "); + /* Always print it as "union foo" even if foo is a typedef'd + name, not a tag. */ + name = type_name_no_tag (type); + if (name != NULL) + { + fputs_filtered (name, stream); + fputs_filtered (" ", stream); + wrap_here (" "); + } } + else + { + name = TYPE_NAME (type); + /* If the name does not start with "union " it means that the + type was defined without a tag, so don't print a tag. It is + possible that we should have a better way of distinguising + tag names from typedef'd names. (e.g. a new tagname field in + the struct type). */ + if (strncmp (name, "union ", 6) == 0) + { + fputs_filtered (name + 6, stream); + fputs_filtered (" ", stream); + } + } + struct_union: + wrap_here (" "); if (show < 0) fprintf_filtered (stream, "{...}"); else @@ -692,11 +739,19 @@ c_type_print_base (type, stream, show, level) case TYPE_CODE_ENUM: fprintf_filtered (stream, "enum "); - if ((name = type_name_no_tag (type)) != NULL) + name = TYPE_NAME (type); + + /* If the name does not start with "enum " it means that the + type was defined without a tag, so don't print a tag. It is + possible that we should have a better way of distinguising + tag names from typedef'd names. (e.g. a new tagname field in + the struct type). */ + if (name != NULL && strncmp (name, "enum ", 5) == 0) { - fputs_filtered (name, stream); + fputs_filtered (name + 5, stream); fputs_filtered (" ", stream); } + wrap_here (" "); if (show < 0) fprintf_filtered (stream, "{...}"); -- 2.30.2