From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1914) id 78C74398A848; Wed, 16 Jun 2021 08:44:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 78C74398A848 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Pierre-Marie de Rodat To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-1502] [Ada] Use more straightforward implementation for Current_Entity_In_Scope X-Act-Checkin: gcc X-Git-Author: Eric Botcazou X-Git-Refname: refs/heads/master X-Git-Oldrev: 3e07c2df705ca3e8be98c708773e450e0543480b X-Git-Newrev: 663e6d7960199559ebd3107a28ea1cfda3e5be00 Message-Id: <20210616084432.78C74398A848@sourceware.org> Date: Wed, 16 Jun 2021 08:44:32 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Jun 2021 08:44:32 -0000 https://gcc.gnu.org/g:663e6d7960199559ebd3107a28ea1cfda3e5be00 commit r12-1502-g663e6d7960199559ebd3107a28ea1cfda3e5be00 Author: Eric Botcazou Date: Sun Feb 21 18:27:25 2021 +0100 [Ada] Use more straightforward implementation for Current_Entity_In_Scope gcc/ada/ * sem_util.adb (Current_Entity_In_Scope): Reimplement. Diff: --- gcc/ada/sem_util.adb | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index c9a2c9fb228..9b2bf86e94e 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -6955,19 +6955,30 @@ package body Sem_Util is ----------------------------- function Current_Entity_In_Scope (N : Name_Id) return Entity_Id is - E : Entity_Id; CS : constant Entity_Id := Current_Scope; - Transient_Case : constant Boolean := Scope_Is_Transient; + E : Entity_Id; begin E := Get_Name_Entity_Id (N); - while Present (E) - and then Scope (E) /= CS - and then (not Transient_Case or else Scope (E) /= Scope (CS)) - loop - E := Homonym (E); - end loop; + + if No (E) then + null; + + elsif Scope_Is_Transient then + while Present (E) loop + exit when Scope (E) = CS or else Scope (E) = Scope (CS); + + E := Homonym (E); + end loop; + + else + while Present (E) loop + exit when Scope (E) = CS; + + E := Homonym (E); + end loop; + end if; return E; end Current_Entity_In_Scope;