OSDN Git Service

* dwarf2out.c (output_call_frame_info): Ignore fde->nothrow as an
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 2 Apr 2003 17:23:01 +0000 (17:23 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 2 Apr 2003 17:23:01 +0000 (17:23 +0000)
        optimization when flag_exceptions not enabled.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65169 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/dwarf2out.c

index 7a1b00f..76631c7 100644 (file)
@@ -1,3 +1,8 @@
+2003-04-02  Richard Henderson  <rth@redhat.com>
+
+        * dwarf2out.c (output_call_frame_info): Ignore fde->nothrow as an
+        optimization when flag_exceptions not enabled.
+
 2003-04-02  Vladimir Makarov  <vmakarov@redhat.com>
 
        * config/rs6000/rs6000.c
index 3c6dec7..dbe8fdf 100644 (file)
@@ -1918,7 +1918,7 @@ output_call_frame_info (for_eh)
   dw_fde_ref fde;
   dw_cfi_ref cfi;
   char l1[20], l2[20], section_start_label[20];
-  int any_lsda_needed = 0;
+  bool any_lsda_needed = false;
   char augmentation[6];
   int augmentation_size;
   int fde_encoding = DW_EH_PE_absptr;
@@ -1929,17 +1929,19 @@ output_call_frame_info (for_eh)
   if (fde_table_in_use == 0)
     return;
 
-  /* If we don't have any functions we'll want to unwind out of, don't emit any
-     EH unwind information.  */
+  /* If we don't have any functions we'll want to unwind out of, don't
+     emit any EH unwind information.  Note that if exceptions aren't
+     enabled, we won't have collected nothrow information, and if we
+     asked for asynchronous tables, we always want this info.  */
   if (for_eh)
     {
-      int any_eh_needed = flag_asynchronous_unwind_tables;
+      bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
 
       for (i = 0; i < fde_table_in_use; i++)
        if (fde_table[i].uses_eh_lsda)
-         any_eh_needed = any_lsda_needed = 1;
+         any_eh_needed = any_lsda_needed = true;
        else if (! fde_table[i].nothrow)
-         any_eh_needed = 1;
+         any_eh_needed = true;
 
       if (! any_eh_needed)
        return;
@@ -2077,7 +2079,7 @@ output_call_frame_info (for_eh)
       fde = &fde_table[i];
 
       /* Don't emit EH unwind info for leaf functions that don't need it.  */
-      if (!flag_asynchronous_unwind_tables && for_eh
+      if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
          && (fde->nothrow || fde->all_throwers_are_sibcalls)
          && !fde->uses_eh_lsda)
        continue;