From patchwork Tue Jun 15 10:20:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierre-Marie de Rodat X-Patchwork-Id: 1492102 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4G44GC16zMz9sW8 for ; Tue, 15 Jun 2021 20:25:39 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B2017398B876 for ; Tue, 15 Jun 2021 10:25:36 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from rock.gnat.com (rock.gnat.com [IPv6:2620:20:4000:0:a9e:1ff:fe9b:1d1]) by sourceware.org (Postfix) with ESMTPS id AAF74398B178 for ; Tue, 15 Jun 2021 10:20:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AAF74398B178 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 6C199117B14; Tue, 15 Jun 2021 06:20:52 -0400 (EDT) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id CIHFwFkxrHMb; Tue, 15 Jun 2021 06:20:52 -0400 (EDT) Received: from tron.gnat.com (tron.gnat.com [IPv6:2620:20:4000:0:46a8:42ff:fe0e:e294]) by rock.gnat.com (Postfix) with ESMTP id 3C1B3117B31; Tue, 15 Jun 2021 06:20:52 -0400 (EDT) Received: by tron.gnat.com (Postfix, from userid 4862) id 3B0CC1CA; Tue, 15 Jun 2021 06:20:52 -0400 (EDT) Date: Tue, 15 Jun 2021 06:20:52 -0400 From: Pierre-Marie de Rodat To: gcc-patches@gcc.gnu.org Subject: [Ada] Remove redundant guard from Find_Overlaid_Entity Message-ID: <20210615102052.GA3288@adacore.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP, T_FILL_THIS_FORM_SHORT autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Piotr Trojanek Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" The comment for Find_Overlaid_Entity which says "node N should be an address representation clause" is now enforced with an assertion. A defensive code is removed from the body; the defensive code at the callers of this routine is enough to prevent crashes. Code cleanup related to improved handling of overlays in SPARK. Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * sem_util.ads (Find_Overlaid_Entity): Simplify comment for spec. * sem_util.adb (Find_Overlaid_Entity): Remove defensive code from body. diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -9371,6 +9371,10 @@ package body Sem_Util is Ent : out Entity_Id; Off : out Boolean) is + pragma Assert + (Nkind (N) = N_Attribute_Definition_Clause + and then Chars (N) = Name_Address); + Expr : Node_Id; begin @@ -9390,61 +9394,56 @@ package body Sem_Util is Ent := Empty; Off := False; - if Nkind (N) = N_Attribute_Definition_Clause - and then Chars (N) = Name_Address - then - Expr := Expression (N); + Expr := Expression (N); - -- This loop checks the form of the expression for Y'Address, - -- using recursion to deal with intermediate constants. + -- This loop checks the form of the expression for Y'Address, using + -- recursion to deal with intermediate constants. - loop - -- Check for Y'Address + loop + -- Check for Y'Address - if Nkind (Expr) = N_Attribute_Reference - and then Attribute_Name (Expr) = Name_Address - then - Expr := Prefix (Expr); - exit; + if Nkind (Expr) = N_Attribute_Reference + and then Attribute_Name (Expr) = Name_Address + then + Expr := Prefix (Expr); + exit; - -- Check for Const where Const is a constant entity + -- Check for Const where Const is a constant entity - elsif Is_Entity_Name (Expr) - and then Ekind (Entity (Expr)) = E_Constant - then - Expr := Constant_Value (Entity (Expr)); + elsif Is_Entity_Name (Expr) + and then Ekind (Entity (Expr)) = E_Constant + then + Expr := Constant_Value (Entity (Expr)); - -- Anything else does not need checking + -- Anything else does not need checking - else - return; - end if; - end loop; + else + return; + end if; + end loop; - -- This loop checks the form of the prefix for an entity, using - -- recursion to deal with intermediate components. + -- This loop checks the form of the prefix for an entity, using + -- recursion to deal with intermediate components. - loop - -- Check for Y where Y is an entity + loop + -- Check for Y where Y is an entity - if Is_Entity_Name (Expr) then - Ent := Entity (Expr); - return; + if Is_Entity_Name (Expr) then + Ent := Entity (Expr); + return; - -- Check for components + -- Check for components - elsif Nkind (Expr) in N_Selected_Component | N_Indexed_Component - then - Expr := Prefix (Expr); - Off := True; + elsif Nkind (Expr) in N_Selected_Component | N_Indexed_Component then + Expr := Prefix (Expr); + Off := True; - -- Anything else does not need checking + -- Anything else does not need checking - else - return; - end if; - end loop; - end if; + else + return; + end if; + end loop; end Find_Overlaid_Entity; ------------------------- diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -900,12 +900,11 @@ package Sem_Util is (N : Node_Id; Ent : out Entity_Id; Off : out Boolean); - -- The node N should be an address representation clause. Determines if - -- the target expression is the address of an entity with an optional - -- offset. If so, set Ent to the entity and, if there is an offset, set - -- Off to True, otherwise to False. If N is not an address representation - -- clause, or if it is not possible to determine that the address is of - -- this form, then set Ent to Empty. + -- The node N should be an address representation clause. Determines if the + -- target expression is the address of an entity with an optional offset. + -- If so, set Ent to the entity and, if there is an offset, set Off to + -- True, otherwise to False. If it is not possible to determine that the + -- address is of this form, then set Ent to Empty. function Find_Parameter_Type (Param : Node_Id) return Entity_Id; -- Return the type of formal parameter Param as determined by its