From: Richard Stallman Date: Sun, 5 Jul 1992 03:31:52 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=196cedd02855a8ee2a7fc2ad3a45fa2ae0290743;p=gcc.git *** empty log message *** From-SVN: r1438 --- diff --git a/gcc/dbxout.c b/gcc/dbxout.c index 3dafea79e38..8da5ef94bd7 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 fed142f4bf9..2aa09f85221 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -1038,6 +1038,15 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes) #ifdef DWARF_DEBUGGING_INFO if (write_symbols == DWARF_DEBUG && block_depth >= 1) 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) diff --git a/gcc/jump.c b/gcc/jump.c index b7660fffefa..f7dd22ad66d 100644 --- a/gcc/jump.c +++ b/gcc/jump.c @@ -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 diff --git a/gcc/rtl.c b/gcc/rtl.c index 8a4e98339cd..a145e54ab50 100644 --- a/gcc/rtl.c +++ b/gcc/rtl.c @@ -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", diff --git a/gcc/rtl.h b/gcc/rtl.h index f1a1a7fa8a2..5756a1cab2b 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -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)