aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-06-10 20:05:23 +0000
committerRichard Stallman <rms@gnu.org>1992-06-10 20:05:23 +0000
commitedbe40ea9aaf851605669701bb618d1c8e406ff4 (patch)
treedbc7502c780644a87a54a7a85222375d5fa9b94c
parentf3c3d3df9c8bf8bfed3fec829f466fff82a9badc (diff)
downloadgcc-edbe40ea9aaf851605669701bb618d1c8e406ff4.zip
gcc-edbe40ea9aaf851605669701bb618d1c8e406ff4.tar.gz
gcc-edbe40ea9aaf851605669701bb618d1c8e406ff4.tar.bz2
*** empty log message ***
From-SVN: r1186
-rw-r--r--gcc/dbxout.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/dbxout.c b/gcc/dbxout.c
index f680465..09f6ece 100644
--- a/gcc/dbxout.c
+++ b/gcc/dbxout.c
@@ -1371,6 +1371,33 @@ dbxout_symbol (decl, local)
/* Nonzero means we must output a tag as well as a typedef. */
tag_needed = 0;
+ /* Handle the case of a C++ structure or union
+ where the TYPE_NAME is a TYPE_DECL
+ which gives both a typedef name and a tag. */
+ /* dbx requires the tag first and the typedef second.
+ ??? there is a bug here. It generates spurious tags
+ for C code. */
+ if ((TREE_CODE (type) == RECORD_TYPE
+ || TREE_CODE (type) == UNION_TYPE)
+ && TYPE_NAME (type) == decl
+ && !(use_gdb_dbx_extensions && have_used_extensions)
+ && !TREE_ASM_WRITTEN (TYPE_NAME (type)))
+ {
+ tree name = TYPE_NAME (type);
+ if (TREE_CODE (name) == TYPE_DECL)
+ name = DECL_NAME (name);
+
+ current_sym_code = DBX_TYPE_DECL_STABS_CODE;
+ current_sym_value = 0;
+ current_sym_addr = 0;
+ current_sym_nchars = 2 + IDENTIFIER_LENGTH (name);
+
+ fprintf (asmfile, "%s \"%s:T", ASM_STABS_OP,
+ IDENTIFIER_POINTER (name));
+ dbxout_type (type, 1, 0);
+ dbxout_finish_symbol (0);
+ }
+
/* Output typedef name. */
fprintf (asmfile, "%s \"%s:", ASM_STABS_OP,
IDENTIFIER_POINTER (DECL_NAME (decl)));
@@ -1395,8 +1422,10 @@ dbxout_symbol (decl, local)
putc ('T', asmfile);
TREE_ASM_WRITTEN (TYPE_NAME (type)) = 1;
}
+#if 0 /* Now we generate the tag for this case up above. */
else
tag_needed = 1;
+#endif
}
/* #endif */