*** empty log message ***
authorRichard Stallman <rms@gnu.org>
Sun, 5 Jul 1992 03:31:52 +0000 (03:31 +0000)
committerRichard Stallman <rms@gnu.org>
Sun, 5 Jul 1992 03:31:52 +0000 (03:31 +0000)
From-SVN: r1438

gcc/dbxout.c
gcc/final.c
gcc/jump.c
gcc/rtl.c
gcc/rtl.h

index 3dafea79e38cc964a3f370f8f8ad48ee3fdb5a01..8da5ef94bd7c206b0e8d1d81c3febe5b480c796e 100644 (file)
@@ -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;
index fed142f4bf9f49a29fd50d1bd92a011b73bafc9f..2aa09f85221a7bce00f767fefe2506409f5c703f 100644 (file)
@@ -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)
index b7660fffefa824f562b826e3c5fb81f31dc9b5bd..f7dd22ad66d65f4bfc866463f39feb7bc42b9ba5 100644 (file)
@@ -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
index 8a4e98339cd211348555834ab8ce2ead50aa9b02..a145e54ab508d0b92c69446bb1d7c0cafdd56a01 100644 (file)
--- 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",
index f1a1a7fa8a26d0304f2024f0adfe570b46cc7103..5756a1cab2ba0d7a60d153edeaf578775233e306 100644 (file)
--- 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)