[Ada] Do full name qualification of local exception names for LLVM
authorGary Dismukes <dismukes@adacore.com>
Tue, 13 Aug 2019 08:07:51 +0000 (08:07 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 13 Aug 2019 08:07:51 +0000 (08:07 +0000)
Exceptions declared within subprograms are associated with objects
allocated statically (at the global level), and it's helpful for the
LLVM compiler (and likely others, such as CCG) if the exception name is
fully qualified, to avoid link name clashes (gcc-based GNAT has always
"uniquified" these names). GNAT was using the simple name for local
exceptions (as for other local objects), but it now uses fully qualified
names for all exceptions.

When compiled with the command:

gcc -c -gnatG local_exception.adb | grep "local_exception__local_exc"

the following output is generated for the test further below:

   local_exception__local_exc : static exception := (
        local_exception__local_exc'unrestricted_access));

procedure Local_Exception is

  Local_Exc : exception;

begin
   null;
end Local_Exception;

2019-08-13  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

* exp_dbug.adb (Fully_Qualify_Name): Add full name qualification
for the E_Exception case.

From-SVN: r274349

gcc/ada/ChangeLog
gcc/ada/exp_dbug.adb

index 415f950464effa03c3854c5efbe374af0f7276e8..d9b757252574d23dd68aef61dfa2f55075bcfa42 100644 (file)
@@ -1,3 +1,8 @@
+2019-08-13  Gary Dismukes  <dismukes@adacore.com>
+
+       * exp_dbug.adb (Fully_Qualify_Name): Add full name qualification
+       for the E_Exception case.
+
 2019-08-13  Gary Dismukes  <dismukes@adacore.com>
 
        * exp_aggr.adb (Aggr_Size_OK): Compute the aggregate size using
index f0df5e25baf2e1f0d861a2cc1c158f676d9543a9..3dbe9ad71519ec662b71a94808c63fd77dc02878 100644 (file)
@@ -1539,6 +1539,7 @@ package body Exp_Dbug is
       elsif Is_Subprogram (Ent)
         or else Ekind (Ent) = E_Subprogram_Body
         or else Is_Type (Ent)
+        or else Ekind (Ent) = E_Exception
       then
          Fully_Qualify_Name (Ent);
          Name_Len := Full_Qualify_Len;