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 handling of SIGFPE in tasking case on Solaris


The runtime was handling SIGFPE slightly differently in the non-tasking and
tasking cases on Solaris, leading for example to unexpected differences in
behavior when a division by zero was encountered.

This patch eliminates the discrepancy as well as aligns the Solaris specific
code with that of other POSIX platforms.  The following testcase must print
  Tasking: FPE Handler
on Solaris when compiled with -gnatp:

with Ada.Text_IO;

procedure Fpe_Tasking is

   task T;

   task body T is
      D : Integer;

      function Return_Zero return Integer is
      begin
         return 0;
      end Return_Zero;

   begin
      D := Return_Zero;

      declare
      begin
         D := 1 / D;
      exception
         when Constraint_Error =>
            Ada.Text_IO.Put_Line ("Tasking: FPE Handler");
      end;
   end T;

begin
   null;
end;

Tested on x86_64-pc-linux-gnu, committed on trunk

2009-06-19  Eric Botcazou  <ebotcazou@adacore.com>

	* s-intman-solaris.adb (Notify_Exception): Do not discriminate on the
	signal code for SIGFPE and raise Program_Error for SIGILL.

	* s-osinte-solaris.ads: Remove signal code constants for SIGFPE.

Attachment: difs
Description: Text document


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