trans.c (Handled_Sequence_Of_Statements_to_gnu): If there is no end label...
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 24 Feb 2017 10:07:45 +0000 (10:07 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 24 Feb 2017 10:07:45 +0000 (10:07 +0000)
* gcc-interface/trans.c (Handled_Sequence_Of_Statements_to_gnu): If
there is no end label, put the location of the At_End procedure on
the call to the procedure.

From-SVN: r245699

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

index a7edb4158cc318682ccda6b198b1b05816ae1a4f..4b60b3e69df33c798deb8aeeb59e1fd3d089f0aa 100644 (file)
@@ -1,3 +1,16 @@
+2017-02-24  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/trans.c (Handled_Sequence_Of_Statements_to_gnu): If
+       there is no end label, put the location of the At_End procedure on
+       the call to the procedure.
+
+2017-02-24  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/misc.c (gnat_type_max_size): Try to return a meaningful
+       value for array types with TYPE_INDEX_TYPE set on their domain type.
+       * gcc-interface/utils.c (max_size): For operations and expressions, do
+       not build a new node if the operands have not changed or are missing.
+
 2017-02-24  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/utils.c (max_size) <tcc_expression>: Flip the second
index e5047f0de460715b5b6b2634f48a556642435a1d..7cde23064808c842741143b597b05f90e30a067c 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                          C Implementation File                           *
  *                                                                          *
- *          Copyright (C) 1992-2016, Free Software Foundation, Inc.         *
+ *          Copyright (C) 1992-2017, Free Software Foundation, Inc.         *
  *                                                                          *
  * GNAT is free software;  you can  redistribute it  and/or modify it under *
  * terms of the  GNU General Public License as published  by the Free Soft- *
@@ -4965,10 +4965,6 @@ Handled_Sequence_Of_Statements_to_gnu (Node_Id gnat_node)
   tree gnu_result;
   tree gnu_expr;
   Node_Id gnat_temp;
-  /* Node providing the sloc for the cleanup actions.  */
-  Node_Id gnat_cleanup_loc_node = (Present (End_Label (gnat_node)) ?
-                                   End_Label (gnat_node) :
-                                   gnat_node);
 
   /* The GCC exception handling mechanism can handle both ZCX and SJLJ schemes
      and we have our own SJLJ mechanism.  To call the GCC mechanism, we call
@@ -5018,7 +5014,8 @@ Handled_Sequence_Of_Statements_to_gnu (Node_Id gnat_node)
 
       /* When we exit this block, restore the saved value.  */
       add_cleanup (build_call_n_expr (set_jmpbuf_decl, 1, gnu_jmpsave_decl),
-                  gnat_cleanup_loc_node);
+                  Present (End_Label (gnat_node))
+                  ? End_Label (gnat_node) : gnat_node);
     }
 
   /* If we are to call a function when exiting this block, add a cleanup
@@ -5027,11 +5024,18 @@ Handled_Sequence_Of_Statements_to_gnu (Node_Id gnat_node)
   if (at_end)
     {
       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);
+
+      /* If there is no end label attached, we use the location of the At_End
+        procedure because Expand_Cleanup_Actions might reset the location of
+        the enclosing construct to that of an inner statement.  */
+      add_cleanup (build_call_n_expr (proc_decl, 0),
+                  Present (End_Label (gnat_node))
+                  ? End_Label (gnat_node) : At_End_Proc (gnat_node));
     }
 
   /* Now build the tree for the declarations and statements inside this block.