diff options
author | Richard Stallman <rms@gnu.org> | 1992-06-10 20:05:23 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-06-10 20:05:23 +0000 |
commit | edbe40ea9aaf851605669701bb618d1c8e406ff4 (patch) | |
tree | dbc7502c780644a87a54a7a85222375d5fa9b94c | |
parent | f3c3d3df9c8bf8bfed3fec829f466fff82a9badc (diff) | |
download | gcc-edbe40ea9aaf851605669701bb618d1c8e406ff4.zip gcc-edbe40ea9aaf851605669701bb618d1c8e406ff4.tar.gz gcc-edbe40ea9aaf851605669701bb618d1c8e406ff4.tar.bz2 |
*** empty log message ***
From-SVN: r1186
-rw-r--r-- | gcc/dbxout.c | 29 |
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 */ |