Commit 1d10f669 by Arnaud Charlet

[multiple changes]

2011-08-29  Tristan Gingold  <gingold@adacore.com>

	* exp_sel.ads (Build_Abort_BLock_Handler): New function spec.
	Adjust comment.
	* exp_sel.adb (Build_Abort_Block): Use Build_Abort_Block_Handler.
	(Build_Abort_Block_Handler): New function to build an Abort_Signal
	exception handler.
	* exp_ch9.adb (Expand_N_Asynchronous_Select): Call
	Build_Abort_Block_Handler to build the exception handler. Do not
	undefer aborts for the Abort_Signal exception handler if back-end
	exception mechanism.
	* exp_ch11.adb (Expand_Exception_Handlers): Do not undefer aborts if
	back_end exceptions for all others and abort_signal.
	* s-except.ads (ZCX_By_Default): New constant.
	* a-except-2005.adb (Raise_Exception): Do not defer abort if ZCX.
	(Raise_Exception_Always): Ditto.
	(Raise_From_Signal_Handler): Ditto.
	(Raise_With_Location_And_Msg): Ditto.
	(Raise_With_Msg): Ditto.
	(Reraise): Ditto.
	(Reraise_Occurence): Ditto.
	(Reraise_Occurrence_Always): Ditto.
	* s-tasren.adb (Exceptional_Complete_Rendezvous): Defer aborts if ZCX.
	* s-tpobop.adb: (Exceptional_Complete_Body): Undefer abort if ZCX.
	* s-interr-hwint.adb (Interrupt_Manager): Defer abort if ZCX.

2011-08-29  Thomas Quinot  <quinot@adacore.com>

	* sem_util.ads (Get_Enum_Lit_From_Pos): Clarify documentation.

From-SVN: r178194
parent 86187d0f
2011-08-29 Tristan Gingold <gingold@adacore.com>
* exp_sel.ads (Build_Abort_BLock_Handler): New function spec.
Adjust comment.
* exp_sel.adb (Build_Abort_Block): Use Build_Abort_Block_Handler.
(Build_Abort_Block_Handler): New function to build an Abort_Signal
exception handler.
* exp_ch9.adb (Expand_N_Asynchronous_Select): Call
Build_Abort_Block_Handler to build the exception handler. Do not
undefer aborts for the Abort_Signal exception handler if back-end
exception mechanism.
* exp_ch11.adb (Expand_Exception_Handlers): Do not undefer aborts if
back_end exceptions for all others and abort_signal.
* s-except.ads (ZCX_By_Default): New constant.
* a-except-2005.adb (Raise_Exception): Do not defer abort if ZCX.
(Raise_Exception_Always): Ditto.
(Raise_From_Signal_Handler): Ditto.
(Raise_With_Location_And_Msg): Ditto.
(Raise_With_Msg): Ditto.
(Reraise): Ditto.
(Reraise_Occurence): Ditto.
(Reraise_Occurrence_Always): Ditto.
* s-tasren.adb (Exceptional_Complete_Rendezvous): Defer aborts if ZCX.
* s-tpobop.adb: (Exceptional_Complete_Body): Undefer abort if ZCX.
* s-interr-hwint.adb (Interrupt_Manager): Defer abort if ZCX.
2011-08-29 Thomas Quinot <quinot@adacore.com>
* sem_util.ads (Get_Enum_Lit_From_Pos): Clarify documentation.
2011-08-29 Robert Dewar <dewar@adacore.com> 2011-08-29 Robert Dewar <dewar@adacore.com>
* snames.adb-tmpl, sem_ch13.adb: Minor reformatting * snames.adb-tmpl, sem_ch13.adb: Minor reformatting
......
...@@ -855,7 +855,9 @@ package body Ada.Exceptions is ...@@ -855,7 +855,9 @@ package body Ada.Exceptions is
-- Go ahead and raise appropriate exception -- Go ahead and raise appropriate exception
Exception_Data.Set_Exception_Msg (EF, Message); Exception_Data.Set_Exception_Msg (EF, Message);
Abort_Defer.all; if not ZCX_By_Default then
Abort_Defer.all;
end if;
Raise_Current_Excep (EF); Raise_Current_Excep (EF);
end Raise_Exception; end Raise_Exception;
...@@ -869,7 +871,9 @@ package body Ada.Exceptions is ...@@ -869,7 +871,9 @@ package body Ada.Exceptions is
is is
begin begin
Exception_Data.Set_Exception_Msg (E, Message); Exception_Data.Set_Exception_Msg (E, Message);
Abort_Defer.all; if not ZCX_By_Default then
Abort_Defer.all;
end if;
Raise_Current_Excep (E); Raise_Current_Excep (E);
end Raise_Exception_Always; end Raise_Exception_Always;
...@@ -944,7 +948,9 @@ package body Ada.Exceptions is ...@@ -944,7 +948,9 @@ package body Ada.Exceptions is
is is
begin begin
Exception_Data.Set_Exception_C_Msg (E, M); Exception_Data.Set_Exception_C_Msg (E, M);
Abort_Defer.all; if not ZCX_By_Default then
Abort_Defer.all;
end if;
Debug_Raise_Exception (E => SSL.Exception_Data_Ptr (E)); Debug_Raise_Exception (E => SSL.Exception_Data_Ptr (E));
Exception_Propagation.Propagate_Exception Exception_Propagation.Propagate_Exception
(E => E, From_Signal_Handler => True); (E => E, From_Signal_Handler => True);
...@@ -1015,7 +1021,9 @@ package body Ada.Exceptions is ...@@ -1015,7 +1021,9 @@ package body Ada.Exceptions is
is is
begin begin
Exception_Data.Set_Exception_C_Msg (E, F, L, C, M); Exception_Data.Set_Exception_C_Msg (E, F, L, C, M);
Abort_Defer.all; if not ZCX_By_Default then
Abort_Defer.all;
end if;
Raise_Current_Excep (E); Raise_Current_Excep (E);
end Raise_With_Location_And_Msg; end Raise_With_Location_And_Msg;
...@@ -1034,7 +1042,9 @@ package body Ada.Exceptions is ...@@ -1034,7 +1042,9 @@ package body Ada.Exceptions is
Excep.Num_Tracebacks := 0; Excep.Num_Tracebacks := 0;
Excep.Cleanup_Flag := False; Excep.Cleanup_Flag := False;
Excep.Pid := Local_Partition_ID; Excep.Pid := Local_Partition_ID;
Abort_Defer.all; if not ZCX_By_Default then
Abort_Defer.all;
end if;
Raise_Current_Excep (E); Raise_Current_Excep (E);
end Raise_With_Msg; end Raise_With_Msg;
...@@ -1276,7 +1286,9 @@ package body Ada.Exceptions is ...@@ -1276,7 +1286,9 @@ package body Ada.Exceptions is
procedure Reraise is procedure Reraise is
Excep : constant EOA := Get_Current_Excep.all; Excep : constant EOA := Get_Current_Excep.all;
begin begin
Abort_Defer.all; if not ZCX_By_Default then
Abort_Defer.all;
end if;
Exception_Propagation.Setup_Exception (Excep, Excep, Reraised => True); Exception_Propagation.Setup_Exception (Excep, Excep, Reraised => True);
Raise_Current_Excep (Excep.Id); Raise_Current_Excep (Excep.Id);
end Reraise; end Reraise;
...@@ -1288,7 +1300,9 @@ package body Ada.Exceptions is ...@@ -1288,7 +1300,9 @@ package body Ada.Exceptions is
procedure Reraise_Occurrence (X : Exception_Occurrence) is procedure Reraise_Occurrence (X : Exception_Occurrence) is
begin begin
if X.Id /= null then if X.Id /= null then
Abort_Defer.all; if not ZCX_By_Default then
Abort_Defer.all;
end if;
Exception_Propagation.Setup_Exception Exception_Propagation.Setup_Exception
(X'Unrestricted_Access, Get_Current_Excep.all, Reraised => True); (X'Unrestricted_Access, Get_Current_Excep.all, Reraised => True);
Save_Occurrence_No_Private (Get_Current_Excep.all.all, X); Save_Occurrence_No_Private (Get_Current_Excep.all.all, X);
...@@ -1302,7 +1316,9 @@ package body Ada.Exceptions is ...@@ -1302,7 +1316,9 @@ package body Ada.Exceptions is
procedure Reraise_Occurrence_Always (X : Exception_Occurrence) is procedure Reraise_Occurrence_Always (X : Exception_Occurrence) is
begin begin
Abort_Defer.all; if not ZCX_By_Default then
Abort_Defer.all;
end if;
Exception_Propagation.Setup_Exception Exception_Propagation.Setup_Exception
(X'Unrestricted_Access, Get_Current_Excep.all, Reraised => True); (X'Unrestricted_Access, Get_Current_Excep.all, Reraised => True);
Save_Occurrence_No_Private (Get_Current_Excep.all.all, X); Save_Occurrence_No_Private (Get_Current_Excep.all.all, X);
......
...@@ -1097,7 +1097,9 @@ package body Exp_Ch11 is ...@@ -1097,7 +1097,9 @@ package body Exp_Ch11 is
-- any case this entire handling is relevant only if aborts -- any case this entire handling is relevant only if aborts
-- are allowed! -- are allowed!
elsif Abort_Allowed then elsif Abort_Allowed
and then Exception_Mechanism /= Back_End_Exceptions
then
-- There are some special cases in which we do not do the -- There are some special cases in which we do not do the
-- undefer. In particular a finalization (AT END) handler -- undefer. In particular a finalization (AT END) handler
...@@ -1122,7 +1124,6 @@ package body Exp_Ch11 is ...@@ -1122,7 +1124,6 @@ package body Exp_Ch11 is
(Others_Choice (Others_Choice
and then and then
All_Others (First (Exception_Choices (Handler)))) All_Others (First (Exception_Choices (Handler))))
and then Abort_Allowed
then then
Prepend_Call_To_Handler (RE_Abort_Undefer); Prepend_Call_To_Handler (RE_Abort_Undefer);
end if; end if;
......
...@@ -5848,6 +5848,7 @@ package body Exp_Ch9 is ...@@ -5848,6 +5848,7 @@ package body Exp_Ch9 is
Enqueue_Call : Node_Id; Enqueue_Call : Node_Id;
Formals : List_Id; Formals : List_Id;
Hdle : List_Id; Hdle : List_Id;
Handler_Stmt : Node_Id;
Index : Node_Id; Index : Node_Id;
Lim_Typ_Stmts : List_Id; Lim_Typ_Stmts : List_Id;
N_Orig : Node_Id; N_Orig : Node_Id;
...@@ -5859,9 +5860,7 @@ package body Exp_Ch9 is ...@@ -5859,9 +5860,7 @@ package body Exp_Ch9 is
ProtP_Stmts : List_Id; ProtP_Stmts : List_Id;
Stmt : Node_Id; Stmt : Node_Id;
Stmts : List_Id; Stmts : List_Id;
Target_Undefer : RE_Id;
TaskE_Stmts : List_Id; TaskE_Stmts : List_Id;
Undefer_Args : List_Id := No_List;
B : Entity_Id; -- Call status flag B : Entity_Id; -- Call status flag
Bnn : Entity_Id; -- Communication block Bnn : Entity_Id; -- Communication block
...@@ -6352,13 +6351,7 @@ package body Exp_Ch9 is ...@@ -6352,13 +6351,7 @@ package body Exp_Ch9 is
-- Create the inner block to protect the abortable part -- Create the inner block to protect the abortable part
Hdle := New_List ( Hdle := New_List (Build_Abort_Block_Handler (Loc));
Make_Implicit_Exception_Handler (Loc,
Exception_Choices =>
New_List (New_Reference_To (Stand.Abort_Signal, Loc)),
Statements => New_List (
Make_Procedure_Call_Statement (Loc,
Name => New_Reference_To (RTE (RE_Abort_Undefer), Loc)))));
Prepend_To (Astats, Prepend_To (Astats,
Make_Procedure_Call_Statement (Loc, Make_Procedure_Call_Statement (Loc,
...@@ -6513,13 +6506,21 @@ package body Exp_Ch9 is ...@@ -6513,13 +6506,21 @@ package body Exp_Ch9 is
-- See 4jexcept.ads for an explanation. -- See 4jexcept.ads for an explanation.
if VM_Target = No_VM then if VM_Target = No_VM then
Target_Undefer := RE_Abort_Undefer; if Exception_Mechanism = Back_End_Exceptions then
-- Aborts are not deferred at beginning of exception handlers
-- in ZCX.
Handler_Stmt := Make_Null_Statement (Loc);
else
Handler_Stmt := Make_Procedure_Call_Statement (Loc,
Name => New_Reference_To (RTE (RE_Abort_Undefer), Loc),
Parameter_Associations => No_List);
end if;
else else
Target_Undefer := RE_Update_Exception; Handler_Stmt := Make_Procedure_Call_Statement (Loc,
Undefer_Args := Name => New_Reference_To (RTE (RE_Update_Exception), Loc),
New_List (Make_Function_Call (Loc, Parameter_Associations => New_List (Make_Function_Call (Loc,
Name => New_Occurrence_Of Name => New_Occurrence_Of (RTE (RE_Current_Target_Exception),
(RTE (RE_Current_Target_Exception), Loc))); Loc))));
end if; end if;
Stmts := New_List ( Stmts := New_List (
...@@ -6542,11 +6543,7 @@ package body Exp_Ch9 is ...@@ -6542,11 +6543,7 @@ package body Exp_Ch9 is
Exception_Choices => Exception_Choices =>
New_List (New_Reference_To (Stand.Abort_Signal, Loc)), New_List (New_Reference_To (Stand.Abort_Signal, Loc)),
Statements => New_List ( Statements => New_List (Handler_Stmt))))),
Make_Procedure_Call_Statement (Loc,
Name => New_Reference_To (
RTE (Target_Undefer), Loc),
Parameter_Associations => Undefer_Args)))))),
-- if not Cancelled (Bnn) then -- if not Cancelled (Bnn) then
-- triggered statements -- triggered statements
...@@ -6602,14 +6599,7 @@ package body Exp_Ch9 is ...@@ -6602,14 +6599,7 @@ package body Exp_Ch9 is
-- Create the inner block to protect the abortable part -- Create the inner block to protect the abortable part
Hdle := New_List ( Hdle := New_List (Build_Abort_Block_Handler (Loc));
Make_Implicit_Exception_Handler (Loc,
Exception_Choices =>
New_List (New_Reference_To (Stand.Abort_Signal, Loc)),
Statements =>
New_List (
Make_Procedure_Call_Statement (Loc,
Name => New_Reference_To (RTE (RE_Abort_Undefer), Loc)))));
Prepend_To (Astats, Prepend_To (Astats,
Make_Procedure_Call_Statement (Loc, Make_Procedure_Call_Statement (Loc,
......
...@@ -64,20 +64,38 @@ package body Exp_Sel is ...@@ -64,20 +64,38 @@ package body Exp_Sel is
Blk), Blk),
Exception_Handlers => Exception_Handlers =>
New_List ( New_List (Build_Abort_Block_Handler (Loc))));
Make_Implicit_Exception_Handler (Loc,
Exception_Choices =>
New_List (
New_Reference_To (Stand.Abort_Signal, Loc)),
Statements =>
New_List (
Make_Procedure_Call_Statement (Loc,
Name =>
New_Reference_To (RTE (
RE_Abort_Undefer), Loc),
Parameter_Associations => No_List))))));
end Build_Abort_Block; end Build_Abort_Block;
-------------------------------
-- Build_Abort_Block_Handler --
-------------------------------
function Build_Abort_Block_Handler
(Loc : Source_Ptr) return Node_Id
is
Stmt : Node_Id;
begin
if Exception_Mechanism = Back_End_Exceptions then
-- With ZCX, aborts are not defered in handlers.
Stmt := Make_Null_Statement (Loc);
else
-- With FE SJLJ, aborts are defered at the beginning of Abort_Signal
-- handlers.
Stmt := Make_Procedure_Call_Statement (Loc,
Name => New_Reference_To (RTE (RE_Abort_Undefer), Loc),
Parameter_Associations => No_List);
end if;
return Make_Implicit_Exception_Handler (Loc,
Exception_Choices =>
New_List (New_Reference_To (Stand.Abort_Signal, Loc)),
Statements =>
New_List (Stmt));
end Build_Abort_Block_Handler;
------------- -------------
-- Build_B -- -- Build_B --
------------- -------------
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- S p e c -- -- S p e c --
-- -- -- --
-- Copyright (C) 1992-2007, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -39,10 +39,22 @@ package Exp_Sel is ...@@ -39,10 +39,22 @@ package Exp_Sel is
-- begin -- begin
-- Blk -- Blk
-- exception -- exception
-- when Abort_Signal => Abort_Undefer; -- when Abort_Signal => Abort_Undefer / null;
-- end; -- end;
-- Abr_Blk_Ent is the name of the generated block, Cln_Blk_Ent is the name -- Abr_Blk_Ent is the name of the generated block, Cln_Blk_Ent is the name
-- of the encapsulated cleanup block, Blk is the actual block name. -- of the encapsulated cleanup block, Blk is the actual block name.
-- The exception handler code is built by Build_Abort_Block_Handler.
function Build_Abort_Block_Handler
(Loc : Source_Ptr) return Node_Id;
-- Generate if front-end exception:
-- when others =>
-- Abort_Under;
-- or if back-end exception:
-- when others =>
-- null;
-- This is an exception handler to stop propagation of aborts, without
-- modifying the deferal level.
function Build_B function Build_B
(Loc : Source_Ptr; (Loc : Source_Ptr;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- S p e c -- -- S p e c --
-- -- -- --
-- Copyright (C) 2006-2009, Free Software Foundation, Inc. -- -- Copyright (C) 2006-2011, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -42,6 +42,9 @@ package System.Exceptions is ...@@ -42,6 +42,9 @@ package System.Exceptions is
pragma Preelaborate_05; pragma Preelaborate_05;
-- To let Ada.Exceptions "with" us and let us "with" Standard_Library -- To let Ada.Exceptions "with" us and let us "with" Standard_Library
ZCX_By_Default : constant Boolean;
-- Visible copy to allow Ada.Exceptions to know the exception model.
package SSL renames System.Standard_Library; package SSL renames System.Standard_Library;
-- To let some of the hooks below have formal parameters typed in -- To let some of the hooks below have formal parameters typed in
-- accordance with what GDB expects. -- accordance with what GDB expects.
...@@ -75,4 +78,7 @@ package System.Exceptions is ...@@ -75,4 +78,7 @@ package System.Exceptions is
-- --
-- The argument is the address of the exception data -- The argument is the address of the exception data
private
ZCX_By_Default : constant Boolean := System.ZCX_By_Default;
end System.Exceptions; end System.Exceptions;
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
-- -- -- --
-- GNARL is free software; you can redistribute it and/or modify it under -- -- GNARL 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -1025,6 +1025,10 @@ package body System.Interrupts is ...@@ -1025,6 +1025,10 @@ package body System.Interrupts is
exception exception
when Standard'Abort_Signal => when Standard'Abort_Signal =>
if ZCX_By_Default then
Initialization.Defer_Abort_Nestable (STPO.Self);
end if;
-- Flush interrupt server semaphores, so they can terminate -- Flush interrupt server semaphores, so they can terminate
Finalize_Interrupt_Servers; Finalize_Interrupt_Servers;
raise; raise;
......
...@@ -553,6 +553,11 @@ package body System.Tasking.Rendezvous is ...@@ -553,6 +553,11 @@ package body System.Tasking.Rendezvous is
end if; end if;
Initialization.Defer_Abort_Nestable (Self_Id); Initialization.Defer_Abort_Nestable (Self_Id);
elsif ZCX_By_Default then
-- With ZCX, aborts are not automatically deferred in handlers
Initialization.Defer_Abort_Nestable (Self_Id);
end if; end if;
-- We need to clean up any accepts which Self may have -- We need to clean up any accepts which Self may have
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 1998-2010, Free Software Foundation, Inc. -- -- Copyright (C) 1998-2011, Free Software Foundation, Inc. --
-- -- -- --
-- GNARL is free software; you can redistribute it and/or modify it under -- -- GNARL 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -258,7 +258,9 @@ package body System.Tasking.Protected_Objects.Operations is ...@@ -258,7 +258,9 @@ package body System.Tasking.Protected_Objects.Operations is
-- enabled for its remaining life. -- enabled for its remaining life.
Self_Id := STPO.Self; Self_Id := STPO.Self;
Initialization.Undefer_Abort_Nestable (Self_Id); if not ZCX_By_Default then
Initialization.Undefer_Abort_Nestable (Self_Id);
end if;
Transfer_Occurrence Transfer_Occurrence
(Entry_Call.Self.Common.Compiler_Data.Current_Excep'Access, (Entry_Call.Self.Common.Compiler_Data.Current_Excep'Access,
Self_Id.Common.Compiler_Data.Current_Excep); Self_Id.Common.Compiler_Data.Current_Excep);
...@@ -270,6 +272,7 @@ package body System.Tasking.Protected_Objects.Operations is ...@@ -270,6 +272,7 @@ package body System.Tasking.Protected_Objects.Operations is
end if; end if;
if Runtime_Traces then if Runtime_Traces then
-- ??? Entry_Call can be null
Send_Trace_Info (PO_Done, Entry_Call.Self); Send_Trace_Info (PO_Done, Entry_Call.Self);
end if; end if;
end Exceptional_Complete_Entry_Body; end Exceptional_Complete_Entry_Body;
......
...@@ -507,11 +507,11 @@ package Sem_Util is ...@@ -507,11 +507,11 @@ package Sem_Util is
(T : Entity_Id; (T : Entity_Id;
Pos : Uint; Pos : Uint;
Loc : Source_Ptr) return Node_Id; Loc : Source_Ptr) return Node_Id;
-- This function obtains the E_Enumeration_Literal entity for the specified -- This function returns an identifier denoting the E_Enumeration_Literal
-- value from the enumeration type or subtype T and returns an identifier -- entity for the specified value from the enumeration type or subtype T.
-- node referencing this value. The second argument is the Pos value, which -- The second argument is the Pos value, which is assumed to be in range.
-- is assumed to be in range. The third argument supplies a source location -- The third argument supplies a source location for constructed nodes
-- for constructed nodes returned by this function. -- returned by this function.
procedure Get_Library_Unit_Name_String (Decl_Node : Node_Id); procedure Get_Library_Unit_Name_String (Decl_Node : Node_Id);
-- Retrieve the fully expanded name of the library unit declared by -- Retrieve the fully expanded name of the library unit declared by
...@@ -1297,7 +1297,7 @@ package Sem_Util is ...@@ -1297,7 +1297,7 @@ package Sem_Util is
procedure Set_Current_Entity (E : Entity_Id); procedure Set_Current_Entity (E : Entity_Id);
pragma Inline (Set_Current_Entity); pragma Inline (Set_Current_Entity);
-- Establish the entity E as the currently visible definition of its -- Establish the entity E as the currently visible definition of its
-- associated name (i.e. the Node_Id associated with its name) -- associated name (i.e. the Node_Id associated with its name).
procedure Set_Debug_Info_Needed (T : Entity_Id); procedure Set_Debug_Info_Needed (T : Entity_Id);
-- Sets the Debug_Info_Needed flag on entity T , and also on any entities -- Sets the Debug_Info_Needed flag on entity T , and also on any entities
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment