From: Olivier Hainque Date: Wed, 23 May 2018 10:23:09 +0000 (+0000) Subject: [Ada] Add a Is_Foreign_Exception predicate to GNAT.Exception_Actions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b682fcf0d9c3c221c4adfdd0b077504c6ac0a8fc;p=gcc.git [Ada] Add a Is_Foreign_Exception predicate to GNAT.Exception_Actions Useful to check if an occurrence caught by a "when others" choice originates from a foreign language, e.g. C++. 2018-05-23 Olivier Hainque gcc/ada/ * libgnat/g-excact.ads (Is_Foreign_Exception): New predicate. * libgnat/g-excact.adb: Implement. From-SVN: r260588 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index e101c99efc8..92bfea2d0d6 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2018-05-23 Olivier Hainque + + * libgnat/g-excact.ads (Is_Foreign_Exception): New predicate. + * libgnat/g-excact.adb: Implement. + 2018-05-23 Ed Schonberg * sem_ch5.adb (Analyze_Iterator_Specification): If a subtype indication diff --git a/gcc/ada/libgnat/g-excact.adb b/gcc/ada/libgnat/g-excact.adb index 3fd738c6770..c70ecab7537 100644 --- a/gcc/ada/libgnat/g-excact.adb +++ b/gcc/ada/libgnat/g-excact.adb @@ -91,6 +91,19 @@ package body GNAT.Exception_Actions is procedure Core_Dump (Occurrence : Exception_Occurrence) is separate; + -------------------------- + -- Is_Foreign_Exception -- + -------------------------- + + function Is_Foreign_Exception (E : Exception_Occurrence) return Boolean is + Foreign_Exception : aliased Exception_Data; + pragma Import + (Ada, Foreign_Exception, "system__exceptions__foreign_exception"); + begin + return (To_Data (Exception_Identity (E)) + = Foreign_Exception'Unchecked_Access); + end Is_Foreign_Exception; + ---------------- -- Name_To_Id -- ---------------- diff --git a/gcc/ada/libgnat/g-excact.ads b/gcc/ada/libgnat/g-excact.ads index 3c21c154898..dd75bb91503 100644 --- a/gcc/ada/libgnat/g-excact.ads +++ b/gcc/ada/libgnat/g-excact.ads @@ -29,9 +29,11 @@ -- -- ------------------------------------------------------------------------------ --- This package provides support for callbacks on exceptions +-- This package provides support for callbacks on exceptions as well as +-- exception-related utility subprograms of possible interest together with +-- exception actions or more generally. --- These callbacks are called immediately when either a specific exception, +-- The callbacks are called immediately when either a specific exception, -- or any exception, is raised, before any other actions taken by raise, in -- particular before any unwinding of the stack occurs. @@ -85,6 +87,10 @@ package GNAT.Exception_Actions is -- Note: All non-predefined exceptions will return Null_Id for programs -- compiled with pragma Restriction (No_Exception_Registration) + function Is_Foreign_Exception (E : Exception_Occurrence) return Boolean; + -- Tell whether the exception occurrence E represents a foreign exception, + -- such as one raised in C++ and caught by a when others choice in Ada. + function Registered_Exceptions_Count return Natural; -- Return the number of exceptions that have been registered so far. -- Exceptions declared locally will not appear in this list until their