aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGary Dismukes <dismukes@adacore.com>2019-08-13 08:07:51 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-08-13 08:07:51 +0000
commit93bfc8c003e7367f0f873b566833a12c092b2755 (patch)
tree230d6b94363947497aebb04b7ccf3f8f52ae1652 /gcc
parent4167b0752365c69e5895b5c8097e7dba34f735f5 (diff)
downloadgcc-93bfc8c003e7367f0f873b566833a12c092b2755.zip
gcc-93bfc8c003e7367f0f873b566833a12c092b2755.tar.gz
gcc-93bfc8c003e7367f0f873b566833a12c092b2755.tar.bz2
[Ada] Do full name qualification of local exception names for LLVM
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/exp_dbug.adb1
2 files changed, 6 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 415f950..d9b7572 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,10 @@
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
universal arithmetic, to avoid situations where the size
computation overflows.
diff --git a/gcc/ada/exp_dbug.adb b/gcc/ada/exp_dbug.adb
index f0df5e2..3dbe9ad 100644
--- a/gcc/ada/exp_dbug.adb
+++ b/gcc/ada/exp_dbug.adb
@@ -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;