+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.
 
 --                                                                          --
 --                                 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- --
 
 --  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
 
          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
             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)
 
                 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 =>