diff options
author | Gary Dismukes <dismukes@adacore.com> | 2019-08-13 08:07:51 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-08-13 08:07:51 +0000 |
commit | 93bfc8c003e7367f0f873b566833a12c092b2755 (patch) | |
tree | 230d6b94363947497aebb04b7ccf3f8f52ae1652 | |
parent | 4167b0752365c69e5895b5c8097e7dba34f735f5 (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ada/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/exp_dbug.adb | 1 |
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; |