aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-07-05 03:31:52 +0000
committerRichard Stallman <rms@gnu.org>1992-07-05 03:31:52 +0000
commit196cedd02855a8ee2a7fc2ad3a45fa2ae0290743 (patch)
tree0994c02c075abf221497d13574266f031e6dcb29 /gcc
parenta53d0bcc79ee90dbc21e76349938038e684893f9 (diff)
downloadgcc-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.c35
-rw-r--r--gcc/final.c9
-rw-r--r--gcc/jump.c24
-rw-r--r--gcc/rtl.c3
-rw-r--r--gcc/rtl.h2
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. */
{
diff --git a/gcc/jump.c b/gcc/jump.c
index b7660ff..f7dd22a 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 8a4e983..a145e54 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 f1a1a7f..5756a1c 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)