From: Richard Stallman Date: Wed, 22 Apr 1992 23:46:27 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a823f1d8d5244c6338e4af1a0df2f5a6f0026e0a;p=gcc.git *** empty log message *** From-SVN: r820 --- diff --git a/gcc/dbxout.c b/gcc/dbxout.c index 62c6398a6f5..3e0de048d81 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -1346,73 +1346,66 @@ dbxout_symbol (decl, local) FORCE_TEXT; - if (DECL_NAME (decl)) - { - /* Nonzero means we must output a tag as well as a typedef. */ - int tag_also = ((TREE_CODE (type) == RECORD_TYPE - || TREE_CODE (type) == UNION_TYPE) - && TYPE_NAME (type) == decl); + { + int tag_needed = 1; - /* Output typedef name. */ - fprintf (asmfile, "%s \"%s:", ASM_STABS_OP, - IDENTIFIER_POINTER (DECL_NAME (decl))); + if (DECL_NAME (decl)) + { + /* Nonzero means we must output a tag as well as a typedef. */ + tag_needed = 0; - /* Short cut way to output a tag also. */ - if (tag_also && use_gdb_dbx_extensions && have_used_extensions) - putc ('T', asmfile); + /* Output typedef name. */ + fprintf (asmfile, "%s \"%s:", ASM_STABS_OP, + IDENTIFIER_POINTER (DECL_NAME (decl))); - putc ('t', asmfile); - current_sym_code = DBX_DECL_STABS_CODE; + /* Short cut way to output a tag also. */ + 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); + TREE_ASM_WRITTEN (TYPE_NAME (type)) = 1; + } + else + tag_needed = 1; + } - dbxout_type (type, 1, 0); - dbxout_finish_symbol (decl); + putc ('t', asmfile); + current_sym_code = DBX_DECL_STABS_CODE; - /* 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); + dbxout_type (type, 1, 0); + dbxout_finish_symbol (decl); + } - 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))) - { - /* Output a tag (a TYPE_DECL with no name, but the type has a name). - This is what represents `struct foo' with no typedef. */ - /* 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); - } + if (tag_needed && TYPE_NAME (type) != 0 + && !TREE_ASM_WRITTEN (TYPE_NAME (type))) + { + /* 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. */ + /* 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); - /* Prevent duplicate output of a typedef. */ - TREE_ASM_WRITTEN (decl) = 1; - break; + fprintf (asmfile, "%s \"%s:T", ASM_STABS_OP, + IDENTIFIER_POINTER (name)); + dbxout_type (type, 1, 0); + dbxout_finish_symbol (0); + } + + /* Prevent duplicate output of a typedef. */ + TREE_ASM_WRITTEN (decl) = 1; + break; + } case PARM_DECL: /* Parm decls go in their own separate chains