+ -- These routines raise a specific exception with a reason message
+ -- attached. The parameters are the file name and line number in each
+ -- case. The names are defined by Exp_Ch11.Get_RT_Exception_Name.
+
+ procedure Rcheck_CE_Access_Check
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Null_Access_Parameter
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Discriminant_Check
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Divide_By_Zero
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Explicit_Raise
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Index_Check
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Invalid_Data
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Length_Check
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Null_Exception_Id
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Null_Not_Allowed
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Overflow_Check
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Partition_Check
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Range_Check
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_CE_Tag_Check
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Access_Before_Elaboration
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Accessibility_Check
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Address_Of_Intrinsic
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_All_Guards_Closed
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Bad_Predicated_Generic_Type
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Current_Task_In_Entry_Body
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Duplicated_Entry_Address
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Explicit_Raise
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Implicit_Return
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Misaligned_Address_Value
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Missing_Return
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Overlaid_Controlled_Object
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Potentially_Blocking_Operation
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Stubbed_Subprogram_Called
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Unchecked_Union_Restriction
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_PE_Non_Transportable_Actual
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_SE_Empty_Storage_Pool
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_SE_Explicit_Raise
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_SE_Infinite_Recursion
+ (File : System.Address; Line : Integer);
+ procedure Rcheck_SE_Object_Too_Large
+ (File : System.Address; Line : Integer);
+
+ procedure Rcheck_PE_Finalize_Raised_Exception
+ (File : System.Address; Line : Integer);
+ -- This routine is separated out because it has quite different behavior
+ -- from the others. This is the "finalize/adjust raised exception". This
+ -- subprogram is always called with abort deferred, unlike all other
+ -- Rcheck_* routines, it needs to call Raise_Exception_No_Defer.
+
+ pragma Export (C, Rcheck_CE_Access_Check,
+ "__gnat_rcheck_CE_Access_Check");
+ pragma Export (C, Rcheck_CE_Null_Access_Parameter,
+ "__gnat_rcheck_CE_Null_Access_Parameter");
+ pragma Export (C, Rcheck_CE_Discriminant_Check,
+ "__gnat_rcheck_CE_Discriminant_Check");
+ pragma Export (C, Rcheck_CE_Divide_By_Zero,
+ "__gnat_rcheck_CE_Divide_By_Zero");
+ pragma Export (C, Rcheck_CE_Explicit_Raise,
+ "__gnat_rcheck_CE_Explicit_Raise");
+ pragma Export (C, Rcheck_CE_Index_Check,
+ "__gnat_rcheck_CE_Index_Check");
+ pragma Export (C, Rcheck_CE_Invalid_Data,
+ "__gnat_rcheck_CE_Invalid_Data");
+ pragma Export (C, Rcheck_CE_Length_Check,
+ "__gnat_rcheck_CE_Length_Check");
+ pragma Export (C, Rcheck_CE_Null_Exception_Id,
+ "__gnat_rcheck_CE_Null_Exception_Id");
+ pragma Export (C, Rcheck_CE_Null_Not_Allowed,
+ "__gnat_rcheck_CE_Null_Not_Allowed");
+ pragma Export (C, Rcheck_CE_Overflow_Check,
+ "__gnat_rcheck_CE_Overflow_Check");
+ pragma Export (C, Rcheck_CE_Partition_Check,
+ "__gnat_rcheck_CE_Partition_Check");
+ pragma Export (C, Rcheck_CE_Range_Check,
+ "__gnat_rcheck_CE_Range_Check");
+ pragma Export (C, Rcheck_CE_Tag_Check,
+ "__gnat_rcheck_CE_Tag_Check");
+ pragma Export (C, Rcheck_PE_Access_Before_Elaboration,
+ "__gnat_rcheck_PE_Access_Before_Elaboration");
+ pragma Export (C, Rcheck_PE_Accessibility_Check,
+ "__gnat_rcheck_PE_Accessibility_Check");
+ pragma Export (C, Rcheck_PE_Address_Of_Intrinsic,
+ "__gnat_rcheck_PE_Address_Of_Intrinsic");
+ pragma Export (C, Rcheck_PE_All_Guards_Closed,
+ "__gnat_rcheck_PE_All_Guards_Closed");
+ pragma Export (C, Rcheck_PE_Bad_Predicated_Generic_Type,
+ "__gnat_rcheck_PE_Bad_Predicated_Generic_Type");
+ pragma Export (C, Rcheck_PE_Current_Task_In_Entry_Body,
+ "__gnat_rcheck_PE_Current_Task_In_Entry_Body");
+ pragma Export (C, Rcheck_PE_Duplicated_Entry_Address,
+ "__gnat_rcheck_PE_Duplicated_Entry_Address");
+ pragma Export (C, Rcheck_PE_Explicit_Raise,
+ "__gnat_rcheck_PE_Explicit_Raise");
+ pragma Export (C, Rcheck_PE_Finalize_Raised_Exception,
+ "__gnat_rcheck_PE_Finalize_Raised_Exception");
+ pragma Export (C, Rcheck_PE_Implicit_Return,
+ "__gnat_rcheck_PE_Implicit_Return");
+ pragma Export (C, Rcheck_PE_Misaligned_Address_Value,
+ "__gnat_rcheck_PE_Misaligned_Address_Value");
+ pragma Export (C, Rcheck_PE_Missing_Return,
+ "__gnat_rcheck_PE_Missing_Return");
+ pragma Export (C, Rcheck_PE_Overlaid_Controlled_Object,
+ "__gnat_rcheck_PE_Overlaid_Controlled_Object");
+ pragma Export (C, Rcheck_PE_Potentially_Blocking_Operation,
+ "__gnat_rcheck_PE_Potentially_Blocking_Operation");
+ pragma Export (C, Rcheck_PE_Stubbed_Subprogram_Called,
+ "__gnat_rcheck_PE_Stubbed_Subprogram_Called");
+ pragma Export (C, Rcheck_PE_Unchecked_Union_Restriction,
+ "__gnat_rcheck_PE_Unchecked_Union_Restriction");
+ pragma Export (C, Rcheck_PE_Non_Transportable_Actual,
+ "__gnat_rcheck_PE_Non_Transportable_Actual");
+ pragma Export (C, Rcheck_SE_Empty_Storage_Pool,
+ "__gnat_rcheck_SE_Empty_Storage_Pool");
+ pragma Export (C, Rcheck_SE_Explicit_Raise,
+ "__gnat_rcheck_SE_Explicit_Raise");
+ pragma Export (C, Rcheck_SE_Infinite_Recursion,
+ "__gnat_rcheck_SE_Infinite_Recursion");
+ pragma Export (C, Rcheck_SE_Object_Too_Large,
+ "__gnat_rcheck_SE_Object_Too_Large");
+
+ -- None of these procedures ever returns (they raise an exception!). By
+ -- using pragma No_Return, we ensure that any junk code after the call,
+ -- such as normal return epilog stuff, can be eliminated).
+
+ pragma No_Return (Rcheck_CE_Access_Check);
+ pragma No_Return (Rcheck_CE_Null_Access_Parameter);
+ pragma No_Return (Rcheck_CE_Discriminant_Check);
+ pragma No_Return (Rcheck_CE_Divide_By_Zero);
+ pragma No_Return (Rcheck_CE_Explicit_Raise);
+ pragma No_Return (Rcheck_CE_Index_Check);
+ pragma No_Return (Rcheck_CE_Invalid_Data);
+ pragma No_Return (Rcheck_CE_Length_Check);
+ pragma No_Return (Rcheck_CE_Null_Exception_Id);
+ pragma No_Return (Rcheck_CE_Null_Not_Allowed);
+ pragma No_Return (Rcheck_CE_Overflow_Check);
+ pragma No_Return (Rcheck_CE_Partition_Check);
+ pragma No_Return (Rcheck_CE_Range_Check);
+ pragma No_Return (Rcheck_CE_Tag_Check);
+ pragma No_Return (Rcheck_PE_Access_Before_Elaboration);
+ pragma No_Return (Rcheck_PE_Accessibility_Check);
+ pragma No_Return (Rcheck_PE_Address_Of_Intrinsic);
+ pragma No_Return (Rcheck_PE_All_Guards_Closed);
+ pragma No_Return (Rcheck_PE_Bad_Predicated_Generic_Type);
+ pragma No_Return (Rcheck_PE_Current_Task_In_Entry_Body);
+ pragma No_Return (Rcheck_PE_Duplicated_Entry_Address);
+ pragma No_Return (Rcheck_PE_Explicit_Raise);
+ pragma No_Return (Rcheck_PE_Implicit_Return);
+ pragma No_Return (Rcheck_PE_Misaligned_Address_Value);
+ pragma No_Return (Rcheck_PE_Missing_Return);
+ pragma No_Return (Rcheck_PE_Overlaid_Controlled_Object);
+ pragma No_Return (Rcheck_PE_Potentially_Blocking_Operation);
+ pragma No_Return (Rcheck_PE_Stubbed_Subprogram_Called);
+ pragma No_Return (Rcheck_PE_Unchecked_Union_Restriction);
+ pragma No_Return (Rcheck_PE_Non_Transportable_Actual);
+ pragma No_Return (Rcheck_PE_Finalize_Raised_Exception);
+ pragma No_Return (Rcheck_SE_Empty_Storage_Pool);
+ pragma No_Return (Rcheck_SE_Explicit_Raise);
+ pragma No_Return (Rcheck_SE_Infinite_Recursion);
+ pragma No_Return (Rcheck_SE_Object_Too_Large);
+
+ -- For compatibility with previous version of GNAT, to preserve bootstrap