diff options
author | Richard Stallman <rms@gnu.org> | 1992-07-05 03:31:52 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-07-05 03:31:52 +0000 |
commit | 196cedd02855a8ee2a7fc2ad3a45fa2ae0290743 (patch) | |
tree | 0994c02c075abf221497d13574266f031e6dcb29 /gcc | |
parent | a53d0bcc79ee90dbc21e76349938038e684893f9 (diff) | |
download | gcc-196cedd02855a8ee2a7fc2ad3a45fa2ae0290743.zip gcc-196cedd02855a8ee2a7fc2ad3a45fa2ae0290743.tar.gz gcc-196cedd02855a8ee2a7fc2ad3a45fa2ae0290743.tar.bz2 |
*** empty log message ***
From-SVN: r1438
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/dbxout.c | 35 | ||||
-rw-r--r-- | gcc/final.c | 9 | ||||
-rw-r--r-- | gcc/jump.c | 24 | ||||
-rw-r--r-- | gcc/rtl.c | 3 | ||||
-rw-r--r-- | gcc/rtl.h | 2 |
5 files changed, 47 insertions, 26 deletions
diff --git a/gcc/dbxout.c b/gcc/dbxout.c index 3dafea7..8da5ef9 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -396,7 +396,7 @@ dbxout_init (asm_file, input_file_name, syms) /* Put the current working directory in an N_SO symbol. */ #ifndef DBX_WORKING_DIRECTORY /* Only some versions of DBX want this, but GDB always does. */ - if (use_gdb_dbx_extensions) + if (use_gnu_debug_info_extensions) #endif { if (cwd || (cwd = getpwd ())) @@ -552,7 +552,7 @@ dbxout_type_fields (type) if (tem != TYPE_FIELDS (type)) CONTIN; - if (use_gdb_dbx_extensions + if (use_gnu_debug_info_extensions && flag_minimal_debug && TREE_CODE (tem) == FIELD_DECL && DECL_VIRTUAL_P (tem) @@ -572,7 +572,7 @@ dbxout_type_fields (type) fprintf (asmfile, "%s:", IDENTIFIER_POINTER (DECL_NAME (tem))); CHARS (2 + IDENTIFIER_LENGTH (DECL_NAME (tem))); - if (use_gdb_dbx_extensions + if (use_gnu_debug_info_extensions && (TREE_PRIVATE (tem) || TREE_PROTECTED (tem) || TREE_CODE (tem) != FIELD_DECL)) { @@ -591,7 +591,7 @@ dbxout_type_fields (type) if (TREE_CODE (tem) == VAR_DECL) { - if (TREE_STATIC (tem) && use_gdb_dbx_extensions) + if (TREE_STATIC (tem) && use_gnu_debug_info_extensions) { char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (tem)); have_used_extensions = 1; @@ -704,11 +704,10 @@ dbxout_type_methods (type) type_identifier_length = IDENTIFIER_LENGTH (type_encoding); - if (TREE_CODE (methods) == FUNCTION_DECL) - fndecl = methods; - else if (TREE_VEC_ELT (methods, 0) != NULL_TREE) + if (TREE_VEC_ELT (methods, 0) != NULL_TREE) fndecl = TREE_VEC_ELT (methods, 0); - else fndecl = TREE_VEC_ELT (methods, 1); + else + fndecl = TREE_VEC_ELT (methods, 1); while (fndecl) { @@ -1013,7 +1012,7 @@ dbxout_type (type, full, show_arg_types) fprintf (asmfile, (TREE_CODE (type) == RECORD_TYPE) ? "s%d" : "u%d", TREE_INT_CST_LOW (tem)); - if (use_gdb_dbx_extensions) + if (use_gnu_debug_info_extensions) { if (n_baseclasses) { @@ -1025,7 +1024,7 @@ dbxout_type (type, full, show_arg_types) for (i = 0; i < n_baseclasses; i++) { tree child = TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (type)), i); - if (use_gdb_dbx_extensions) + if (use_gnu_debug_info_extensions) { have_used_extensions = 1; putc (TREE_VIA_VIRTUAL (child) ? '1' @@ -1059,14 +1058,14 @@ dbxout_type (type, full, show_arg_types) /* Write out the field declarations. */ dbxout_type_fields (type); - if (use_gdb_dbx_extensions && TYPE_METHODS (type) != NULL_TREE) + if (use_gnu_debug_info_extensions && TYPE_METHODS (type) != NULL_TREE) { have_used_extensions = 1; dbxout_type_methods (type); } putc (';', asmfile); - if (use_gdb_dbx_extensions && TREE_CODE (type) == RECORD_TYPE + if (use_gnu_debug_info_extensions && TREE_CODE (type) == RECORD_TYPE /* Avoid the ~ if we don't really need it--it confuses dbx. */ && TYPE_VFIELD (type)) { @@ -1127,7 +1126,7 @@ dbxout_type (type, full, show_arg_types) break; case METHOD_TYPE: - if (use_gdb_dbx_extensions) + if (use_gnu_debug_info_extensions) { have_used_extensions = 1; putc ('#', asmfile); @@ -1162,7 +1161,7 @@ dbxout_type (type, full, show_arg_types) break; case OFFSET_TYPE: - if (use_gdb_dbx_extensions) + if (use_gnu_debug_info_extensions) { have_used_extensions = 1; putc ('@', asmfile); @@ -1181,9 +1180,9 @@ dbxout_type (type, full, show_arg_types) break; case REFERENCE_TYPE: - if (use_gdb_dbx_extensions) + if (use_gnu_debug_info_extensions) have_used_extensions = 1; - putc (use_gdb_dbx_extensions ? '&' : '*', asmfile); + putc (use_gnu_debug_info_extensions ? '&' : '*', asmfile); CHARS (1); dbxout_type (TREE_TYPE (type), 0, 0); break; @@ -1380,7 +1379,7 @@ dbxout_symbol (decl, local) if ((TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE) && TYPE_NAME (type) == decl - && !(use_gdb_dbx_extensions && have_used_extensions) + && !(use_gnu_debug_info_extensions && have_used_extensions) && !TREE_ASM_WRITTEN (TYPE_NAME (type))) { tree name = TYPE_NAME (type); @@ -1407,7 +1406,7 @@ dbxout_symbol (decl, local) || TREE_CODE (type) == UNION_TYPE) && TYPE_NAME (type) == decl) { - if (use_gdb_dbx_extensions && have_used_extensions) + if (use_gnu_debug_info_extensions && have_used_extensions) { putc ('T', asmfile); TREE_ASM_WRITTEN (TYPE_NAME (type)) = 1; diff --git a/gcc/final.c b/gcc/final.c index fed142f..2aa09f8 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -1040,6 +1040,15 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes) dwarfout_end_block (pending_blocks[block_depth]); #endif } + else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL + && (debug_info_level == DINFO_LEVEL_NORMAL + || debug_info_level == DINFO_LEVEL_VERBOSE)) + { +#ifdef DWARF_DEBUGGING_INFO + if (write_symbols == DWARF_DEBUG) + dwarfout_label (insn); +#endif + } else if (NOTE_LINE_NUMBER (insn) > 0) /* This note is a line-number. */ { @@ -2890,6 +2890,8 @@ delete_insn (insn) { register rtx next = NEXT_INSN (insn); register rtx prev = PREV_INSN (insn); + register int was_code_label = (GET_CODE (insn) == CODE_LABEL); + register int dont_really_delete = 0; while (next && INSN_DELETED_P (next)) next = NEXT_INSN (next); @@ -2898,9 +2900,18 @@ delete_insn (insn) if (INSN_DELETED_P (insn)) return next; - /* Mark this insn as deleted. */ - - INSN_DELETED_P (insn) = 1; + /* Don't delete user-declared labels. Convert them to special NOTEs + instead. */ + if (was_code_label && LABEL_NAME (insn) != 0) + { + PUT_CODE (insn, NOTE); + NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED_LABEL; + NOTE_SOURCE_FILE (insn) = 0; + dont_really_delete = 1; + } + else + /* Mark this insn as deleted. */ + INSN_DELETED_P (insn) = 1; /* If this is an unconditional jump, delete it from the jump chain. */ if (simplejump_p (insn)) @@ -2917,7 +2928,7 @@ delete_insn (insn) /* Patch out INSN (and the barrier if any) */ - if (optimize) + if (optimize && ! dont_really_delete) { if (prev) { @@ -2964,7 +2975,7 @@ delete_insn (insn) delete the dispatch table. The tablejump must have gone already. It isn't useful to fall through into a table. */ - if (GET_CODE (insn) == CODE_LABEL + if (was_code_label && NEXT_INSN (insn) != 0 && GET_CODE (NEXT_INSN (insn)) == JUMP_INSN && (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC @@ -2973,8 +2984,7 @@ delete_insn (insn) /* If INSN was a label, delete insns following it if now unreachable. */ - if (GET_CODE (insn) == CODE_LABEL && prev - && GET_CODE (prev) == BARRIER) + if (was_code_label && prev && GET_CODE (prev) == BARRIER) { register RTX_CODE code; while (next != 0 @@ -170,7 +170,8 @@ char *note_insn_name[] = { "NOTE_INSN_FUNCTION_BEG", "NOTE_INSN_DELETED", "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END", "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP", "NOTE_INSN_LOOP_CONT", "NOTE_INSN_LOOP_VTOP", - "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG" }; + "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG", + "NOT_INSN_DELETED_LABEL"}; char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0", "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL", @@ -340,6 +340,8 @@ extern char *reg_note_name[]; #define NOTE_INSN_PROLOGUE_END -10 /* This marks the point immediately prior to the first epilogue insn. */ #define NOTE_INSN_EPILOGUE_BEG -11 +/* Generated in place of user-declared labels when they are deleted. */ +#define NOTE_INSN_DELETED_LABEL -12 /* Don't forget to change note_insn_name in rtl.c. */ #define NOTE_DECL_NAME(INSN) ((INSN)->fld[3].rtstr) |