[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 6 Aug 2012 08:17:25 +0000 (10:17 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 6 Aug 2012 08:17:25 +0000 (10:17 +0200)
2012-08-06  Geert Bosch  <bosch@adacore.com>

* a-ngelfu.adb: Change obsolete comment that this is a non-strict
implementation.

2012-08-06  Steve Baird  <baird@adacore.com>

* exp_ch7.adb (Build_Finalizer.Process_Object_Declaration): If
CodePeer_Mode = True then omit exception handlers for finalization calls

2012-08-06  Robert Dewar  <dewar@adacore.com>

* exp_aggr.adb: Minor reformatting.

From-SVN: r190165

gcc/ada/ChangeLog
gcc/ada/a-ngelfu.adb
gcc/ada/exp_aggr.adb
gcc/ada/exp_ch7.adb

index 2533fd336b59699f8b0b7a5619bc491c0547057e..0610114c4016fc08c3581aad9f6ba70465665604 100644 (file)
@@ -1,3 +1,17 @@
+2012-08-06  Geert Bosch  <bosch@adacore.com>
+
+       * a-ngelfu.adb: Change obsolete comment that this is a non-strict
+       implementation.
+
+2012-08-06  Steve Baird  <baird@adacore.com>
+
+       * exp_ch7.adb (Build_Finalizer.Process_Object_Declaration): If
+       CodePeer_Mode = True then omit exception handlers for finalization calls
+
+2012-08-06  Robert Dewar  <dewar@adacore.com>
+
+       * exp_aggr.adb: Minor reformatting.
+
 2012-08-06  Robert Dewar  <dewar@adacore.com>
 
        * sem_ch6.adb: Remove useless flag Body_Deleted.
index ae95d66547b1ce30795694ef8d9739f272ff8978..cd426ca7511fa4bba5bde593472aa226bcd1b915 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2012, 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- --
@@ -31,9 +31,7 @@
 
 --  This body is specifically for using an Ada interface to C math.h to get
 --  the computation engine. Many special cases are handled locally to avoid
---  unnecessary calls. This is not a "strict" implementation, but takes full
---  advantage of the C functions, e.g. in providing interface to hardware
---  provided versions of the elementary functions.
+--  unnecessary calls or to meet Annex G strict mode requirements.
 
 --  Uses functions sqrt, exp, log, pow, sin, asin, cos, acos, tan, atan, sinh,
 --  cosh, tanh from C library via math.h
index 98070a9a2df9e826f796752941d6d0eeff47ff67..294a7d82ab2098b51655f68a4775200982078ce7 100644 (file)
@@ -3737,6 +3737,9 @@ package body Exp_Aggr is
          Analyze_And_Resolve (N, Typ);
       end if;
 
+      --  Is Static_Eaboration_Desired has been specified, diagnose aggregates
+      --  that will still require initialization code.
+
       if (Ekind (Current_Scope) = E_Package
         and then Static_Elaboration_Desired (Current_Scope))
         and then Nkind (Parent (N)) = N_Object_Declaration
@@ -3745,7 +3748,7 @@ package body Exp_Aggr is
             Expr : Node_Id;
 
          begin
-            if Present (Expressions (N)) then
+            if Nkind (N) = N_Aggregate and then Present (Expressions (N)) then
                Expr := First (Expressions (N));
                while Present (Expr) loop
                   if Nkind_In (Expr, N_Integer_Literal, N_Real_Literal)
index 6297dc99ccd48a420aefdeb2b2dff76c7fc9b171..122065df803cd9332e5569663966aa0ebc0297b6 100644 (file)
@@ -2645,7 +2645,18 @@ package body Exp_Ch7 is
                 Obj_Ref => Obj_Ref,
                 Typ     => Obj_Typ);
 
-            if Exceptions_OK then
+            --  For CodePeer, the exception handlers normally generated here
+            --  generate complex flowgraphs which result in capacity problems.
+            --  Omitting these handlers for CodePeer is justified as follows:
+
+            --    If a handler is dead, then omitting it is surely ok
+
+            --    If a handler is live, then CodePeer should flag the
+            --      potentially-exception-raising construct that causes it
+            --      to be live. That is what we are interested in, not what
+            --      happens after the exception is raised.
+
+            if Exceptions_OK and not CodePeer_Mode then
                Fin_Stmts := New_List (
                  Make_Block_Statement (Loc,
                    Handled_Statement_Sequence =>