This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Ada] fix propagation of exception message in protected entry


Tested on i686-linux, committed on mainline.

When propagating an exception raised during a protected entry call, we
should also propagate the exception message as required by Ada semantics.
--
Test case:
gnatmake -q q && q should display:
Exception name: P.E
Message: yo!
--
package P is
   E : exception;
   protected PO is
      entry Wait;
      procedure Do_Raise;
   private
      Raised : Boolean := False;
   end PO;
end P;
with Ada.Exceptions; use Ada.Exceptions;
package body P is
   protected body PO is
      entry Wait when Raised is                                                       begin
         Raise_Exception (E'Identity, "yo!");
      end Wait;
      procedure Do_Raise is begin Raised := True; end Do_Raise;
   end PO;
end P;
with Ada.Exceptions; use Ada.Exceptions;
with Ada.Text_IO; use Ada.Text_IO;
with P; use P;
procedure Q is
   task R;
   task body R is begin PO.Do_Raise; end R;
begin
   PO.Wait;
exception when X : others => Put_Line (Exception_Information (X));
end Q;

Also add support for pragma Restrictions Max_Entry_Queue_Length. It had
already been done for the Ravenscar profile, and has been finished for the
general case (for any value of the queue length).

2005-06-14  Arnaud Charlet  <charlet@adacore.com>
	    Jose Ruiz  <ruiz@adacore.com>

	* s-tposen.adb, s-tpobop.adb
	(Exceptional_Complete_Rendezvous): Save the occurrence and not only
	the exception id.
	(PO_Do_Or_Queue): Before queuing a task on an entry queue we check that
	there is no violation of the Max_Entry_Queue_Length restriction (if it
	has been set); Program_Error is raised otherwise.
	(Requeue_Call): Before requeuing the task on the target entry queue we
	check that there is no violation of the Max_Entry_Queue_Length
	restriction (if it has been set); Program_Error is raised otherwise.

Attachment: difs.53
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]