+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,
-- 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,
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
---------------------------------------------------------------------------
-- 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");
function Allocate_Occurrence return EOA is
Res : GNAT_GCC_Exception_Access;
+
begin
Res :=
new GNAT_GCC_Exception'
is
begin
-- Simply propagate it
+
Propagate_GCC_Exception (GCC_Exception);
end Reraise_GCC_Exception;
-- 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.
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;
-- 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
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
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
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;