Commit a823f1d8 by Richard Stallman

*** empty log message ***

From-SVN: r820
parent cd2b37d9
...@@ -1346,52 +1346,44 @@ dbxout_symbol (decl, local) ...@@ -1346,52 +1346,44 @@ dbxout_symbol (decl, local)
FORCE_TEXT; FORCE_TEXT;
{
int tag_needed = 1;
if (DECL_NAME (decl)) if (DECL_NAME (decl))
{ {
/* Nonzero means we must output a tag as well as a typedef. */ /* Nonzero means we must output a tag as well as a typedef. */
int tag_also = ((TREE_CODE (type) == RECORD_TYPE tag_needed = 0;
|| TREE_CODE (type) == UNION_TYPE)
&& TYPE_NAME (type) == decl);
/* Output typedef name. */ /* Output typedef name. */
fprintf (asmfile, "%s \"%s:", ASM_STABS_OP, fprintf (asmfile, "%s \"%s:", ASM_STABS_OP,
IDENTIFIER_POINTER (DECL_NAME (decl))); IDENTIFIER_POINTER (DECL_NAME (decl)));
/* Short cut way to output a tag also. */ /* Short cut way to output a tag also. */
if (tag_also && use_gdb_dbx_extensions && have_used_extensions) if ((TREE_CODE (type) == RECORD_TYPE
|| TREE_CODE (type) == UNION_TYPE)
&& TYPE_NAME (type) == decl)
{
if (use_gdb_dbx_extensions && have_used_extensions)
{
putc ('T', asmfile); putc ('T', asmfile);
TREE_ASM_WRITTEN (TYPE_NAME (type)) = 1;
}
else
tag_needed = 1;
}
putc ('t', asmfile); putc ('t', asmfile);
current_sym_code = DBX_DECL_STABS_CODE; current_sym_code = DBX_DECL_STABS_CODE;
dbxout_type (type, 1, 0); dbxout_type (type, 1, 0);
dbxout_finish_symbol (decl); dbxout_finish_symbol (decl);
/* Long way to output a tag also. */
if (tag_also && ! (use_gdb_dbx_extensions && have_used_extensions))
{
/* Output the tag for the type, not using GDB extensions.
This represents `struct foo' as opposed to `typedef foo'. */
/* In C++, the name of a type is the corresponding typedef.
In C, it is an IDENTIFIER_NODE. */
tree name = TYPE_NAME (type);
if (TREE_CODE (name) == TYPE_DECL)
name = DECL_NAME (name);
current_sym_code = DBX_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);
} }
}
else if (TYPE_NAME (type) != 0 && !TREE_ASM_WRITTEN (TYPE_NAME (type))) if (tag_needed && TYPE_NAME (type) != 0
&& !TREE_ASM_WRITTEN (TYPE_NAME (type)))
{ {
/* Output a tag (a TYPE_DECL with no name, but the type has a name). /* For a TYPE_DECL with no name, but the type has a name,
output a tag.
This is what represents `struct foo' with no typedef. */ This is what represents `struct foo' with no typedef. */
/* In C++, the name of a type is the corresponding typedef. /* In C++, the name of a type is the corresponding typedef.
In C, it is an IDENTIFIER_NODE. */ In C, it is an IDENTIFIER_NODE. */
...@@ -1413,6 +1405,7 @@ dbxout_symbol (decl, local) ...@@ -1413,6 +1405,7 @@ dbxout_symbol (decl, local)
/* Prevent duplicate output of a typedef. */ /* Prevent duplicate output of a typedef. */
TREE_ASM_WRITTEN (decl) = 1; TREE_ASM_WRITTEN (decl) = 1;
break; break;
}
case PARM_DECL: case PARM_DECL:
/* Parm decls go in their own separate chains /* Parm decls go in their own separate chains
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment