trans.c (Handled_Sequence_Of_Statements_to_gnu): When not optimizing the CFG...
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 26 Jun 2015 10:25:04 +0000 (10:25 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 26 Jun 2015 10:25:04 +0000 (10:25 +0000)
* gcc-interface/trans.c (Handled_Sequence_Of_Statements_to_gnu): When
not optimizing the CFG, clear the DECL_DECLARED_INLINE_P flag on the
at-end procedures.

From-SVN: r225004

gcc/ada/ChangeLog
gcc/ada/gcc-interface/trans.c

index 943395e99a87227f67c5a8976a5846021e97f6a0..89d8898e58d3d02918d89667271178f6b43ea413 100644 (file)
@@ -1,3 +1,9 @@
+2015-06-26  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/trans.c (Handled_Sequence_Of_Statements_to_gnu): When
+       not optimizing the CFG, clear the DECL_DECLARED_INLINE_P flag on the
+       at-end procedures.
+
 2015-06-26  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/gigi.h (note_types_used_by_globals): Delete.
index ff910cec343810e5bfd79bfa4fe9a1978c2610ba..5c9ea08694384ffbd318c0229e8399d2f9f26789 100644 (file)
@@ -4880,8 +4880,14 @@ Handled_Sequence_Of_Statements_to_gnu (Node_Id gnat_node)
      to the binding level we made above.  Note that add_cleanup is FIFO
      so we must register this cleanup after the EH cleanup just above.  */
   if (at_end)
-    add_cleanup (build_call_n_expr (gnat_to_gnu (At_End_Proc (gnat_node)), 0),
-                gnat_cleanup_loc_node);
+    {
+      tree proc_decl = gnat_to_gnu (At_End_Proc (gnat_node));
+      /* When not optimizing, disable inlining of finalizers as this can
+        create a more complex CFG in the parent function.  */
+      if (!optimize)
+       DECL_DECLARED_INLINE_P (proc_decl) = 0;
+      add_cleanup (build_call_n_expr (proc_decl, 0), gnat_cleanup_loc_node);
+    }
 
   /* Now build the tree for the declarations and statements inside this block.
      If this is SJLJ, set our jmp_buf as the current buffer.  */