2013-10-17 Tristan Gingold <gingold@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 17 Oct 2013 10:28:53 +0000 (10:28 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 17 Oct 2013 10:28:53 +0000 (10:28 +0000)
* a-exexpr-gcc.adb: Synchronize declarations of other/all others.

2013-10-17  Thomas Quinot  <quinot@adacore.com>

* exp_pakd.adb: Add missing guard protecting Reverse_Storage_Order
call.
* sem_res.adb: Minor code cleanup: use named parameter association
(not positional) for Boolean parameter Sec_Stack in calls to
Establish_Transient_Scope.

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

gcc/ada/ChangeLog
gcc/ada/a-exexpr-gcc.adb
gcc/ada/exp_pakd.adb
gcc/ada/sem_res.adb

index 41fd986..822e880 100644 (file)
@@ -1,3 +1,15 @@
+2013-10-17  Tristan Gingold  <gingold@adacore.com>
+
+       * a-exexpr-gcc.adb: Synchronize declarations of other/all others.
+
+2013-10-17  Thomas Quinot  <quinot@adacore.com>
+
+       * exp_pakd.adb: Add missing guard protecting Reverse_Storage_Order
+       call.
+       * sem_res.adb: Minor code cleanup: use named parameter association
+       (not positional) for Boolean parameter Sec_Stack in calls to
+       Establish_Transient_Scope.
+
 2013-10-15  Thomas Quinot  <quinot@adacore.com>
 
        * exp_pakd.adb (Expand_Packed_Element_Set,
index e98a15a..a9d9e4b 100644 (file)
@@ -45,11 +45,10 @@ package body Exception_Propagation is
    -- Entities to interface with the GCC runtime --
    ------------------------------------------------
 
-   --  These come from "C++ ABI for Itanium: Exception handling", which is
-   --  the reference for GCC.
+   --  These come from "C++ ABI for Itanium: Exception handling", which is the
+   --  reference for GCC.
 
-   --  Return codes from the GCC runtime functions used to propagate
-   --  an exception.
+   --  Return codes from GCC runtime functions used to propagate an exception
 
    type Unwind_Reason_Code is
      (URC_NO_REASON,
@@ -226,9 +225,8 @@ package body Exception_Propagation is
       UW_Argument  : System.Address) return Unwind_Reason_Code;
    pragma Import (C, CleanupUnwind_Handler,
                   "__gnat_cleanupunwind_handler");
-   --  Hook called at each step of the forced unwinding we perform to
-   --  trigger cleanups found during the propagation of an unhandled
-   --  exception.
+   --  Hook called at each step of the forced unwinding we perform to trigger
+   --  cleanups found during the propagation of an unhandled exception.
 
    --  GCC runtime functions used. These are C non-void functions, actually,
    --  but we ignore the return values. See raise.c as to why we are using
@@ -295,7 +293,9 @@ package body Exception_Propagation is
    ---------------------------------------------------------------------------
 
    --  Currently, these only have their address taken and compared so there is
-   --  no real point having whole exception data blocks allocated.
+   --  no real point having whole exception data blocks allocated. Note that
+   --  there are corresponding declarations in gigi (trans.c) which must be
+   --  kept properly synchronized.
 
    Others_Value : constant Character := 'O';
    pragma Export (C, Others_Value, "__gnat_others_value");
@@ -315,6 +315,7 @@ package body Exception_Propagation is
 
    function Allocate_Occurrence return EOA is
       Res : GNAT_GCC_Exception_Access;
+
    begin
       Res :=
         new GNAT_GCC_Exception'
@@ -432,6 +433,7 @@ package body Exception_Propagation is
    is
    begin
       --  Simply propagate it
+
       Propagate_GCC_Exception (GCC_Exception);
    end Reraise_GCC_Exception;
 
@@ -467,9 +469,10 @@ package body Exception_Propagation is
       --  unwinding hook calls Unhandled_Exception_Terminate when end of
       --  stack is reached.
 
-      Unwind_ForcedUnwind (GCC_Exception,
-                           CleanupUnwind_Handler'Address,
-                           System.Null_Address);
+      Unwind_ForcedUnwind
+        (GCC_Exception,
+         CleanupUnwind_Handler'Address,
+         System.Null_Address);
 
       --  We get here in case of error. The debugger has been notified before
       --  the second step above.
@@ -503,7 +506,7 @@ package body Exception_Propagation is
 
          declare
             GNAT_Occurrence : constant GNAT_GCC_Exception_Access :=
-              To_GNAT_GCC_Exception (GCC_Exception);
+                                To_GNAT_GCC_Exception (GCC_Exception);
          begin
             Save_Occurrence (Excep.all, GNAT_Occurrence.Occurrence);
          end;
index 7a27b7a..273baf0 100644 (file)
@@ -2135,10 +2135,16 @@ package body Exp_Pakd is
          --  Swap back if necessary
 
          Set_Etype (Arg, Ctyp);
-         if Byte_Swapped and then Reverse_Storage_Order (Ctyp) then
-            Arg := Byte_Swap (Arg,
-                     Left_Justify  => not Bytes_Big_Endian,
-                     Right_Justify => False);
+
+         if Byte_Swapped
+           and then (Is_Record_Type (Ctyp) or else Is_Array_Type (Ctyp))
+           and then Reverse_Storage_Order (Ctyp)
+         then
+            Arg :=
+              Byte_Swap
+                (Arg,
+                 Left_Justify  => not Bytes_Big_Endian,
+                 Right_Justify => False);
          end if;
 
          --  We needed to analyze this before we do the unchecked convert
index 430766d..9409972 100644 (file)
@@ -3602,7 +3602,7 @@ package body Sem_Res is
               and then Full_Expander_Active
               and then (Is_Controlled (Etype (F)) or else Has_Task (Etype (F)))
             then
-               Establish_Transient_Scope (A, False);
+               Establish_Transient_Scope (A, Sec_Stack => False);
                Resolve (A, Etype (F));
 
             --  A small optimization: if one of the actuals is a concatenation
@@ -3621,7 +3621,7 @@ package body Sem_Res is
                       and then Chars (Nam) = Name_Asm)
               and then not Static_Concatenation (A)
             then
-               Establish_Transient_Scope (A, False);
+               Establish_Transient_Scope (A, Sec_Stack => False);
                Resolve (A, Etype (F));
 
             else
@@ -3680,7 +3680,7 @@ package body Sem_Res is
                      if (Is_Controlled (DDT) or else Has_Task (DDT))
                        and then Full_Expander_Active
                      then
-                        Establish_Transient_Scope (A, False);
+                        Establish_Transient_Scope (A, Sec_Stack => False);
                      end if;
                   end;