From 1ae0159eb46044545610b78fc4ea82427c45c568 Mon Sep 17 00:00:00 2001 From: Simon Buist Date: Wed, 10 Jul 2019 09:02:12 +0000 Subject: [PATCH] [Ada] Entity names are not unique This patch updates the Unique_Name procedure in order to prefix the string "ada___" to child units that have a nested subprogram or package, so that they do not clash with a parent package of the same name. This is for GNATprove only and does not affect regular compilation. 2019-07-10 Simon Buist gcc/ada/ * sem_util.ads (Child_Prefix): New constant. * sem_util.adb (Unique_Name): Add a special prefix to child units that have a nested subprogram or package. From-SVN: r273343 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/sem_util.adb | 2 ++ gcc/ada/sem_util.ads | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f99b6db923c..7e609bdc049 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2019-07-10 Simon Buist + + * sem_util.ads (Child_Prefix): New constant. + * sem_util.adb (Unique_Name): Add a special prefix to child + units that have a nested subprogram or package. + 2019-07-10 Arnaud Charlet * sfn_scan.adb (Scan_SFN_Pragmas): Add pragma Assert. diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index e011c099c19..448eea15e6d 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -25781,6 +25781,8 @@ package body Sem_Util is end if; end; + elsif Is_Child_Unit (U) then + return Child_Prefix & Unique_Name (S) & "__" & This_Name; else return Unique_Name (S) & "__" & This_Name; end if; diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index 3eb9d57a94f..808d6935257 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -2854,6 +2854,10 @@ package Sem_Util is -- Return a unique name for entity E, which could be used to identify E -- across compilation units. + Child_Prefix : constant String := "ada___"; + -- Prefix for child packages when building a unique name for an entity. It + -- is included here to share between Unique_Name and gnatprove. + function Unit_Is_Visible (U : Entity_Id) return Boolean; -- Determine whether a compilation unit is visible in the current context, -- because there is a with_clause that makes the unit available. Used to -- 2.30.2