[multiple changes]

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.

From-SVN: r203746
This commit is contained in:
Arnaud Charlet 2013-10-17 12:28:53 +02:00
parent f4bed77be4
commit 13b2f7fd63
4 changed files with 40 additions and 19 deletions

View 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,

View 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;

View 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

View 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;