From patchwork Wed Jun 3 10:03:04 2020 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: 1302910 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=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=adacore.com Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (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 49cPdx66GMz9sTH for ; Wed, 3 Jun 2020 20:04:37 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3BF96388C036; Wed, 3 Jun 2020 10:03:18 +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 ESMTP id 86B43388B014 for ; Wed, 3 Jun 2020 10:03:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 86B43388B014 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=derodat@adacore.com Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id C8633117B53; Wed, 3 Jun 2020 06:03:04 -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 RegfSC0UhwEb; Wed, 3 Jun 2020 06:03:04 -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 A5A44117725; Wed, 3 Jun 2020 06:03:04 -0400 (EDT) Received: by tron.gnat.com (Postfix, from userid 4862) id A5011156; Wed, 3 Jun 2020 06:03:04 -0400 (EDT) Date: Wed, 3 Jun 2020 06:03:04 -0400 From: Pierre-Marie de Rodat To: gcc-patches@gcc.gnu.org Subject: [Ada] Small housekeeping work in Check_Private_View Message-ID: <20200603100304.GA6630@adacore.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP 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: Eric Botcazou Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" This reverts a series of 3 old changes made without real explanation to the second main case of Check_Private_View, which appear to be largely obsolete by now and have made it quite hard to follow, and also changes it to using In_Open_Scopes as the other cases. No functional changes. Tested on x86_64-pc-linux-gnu, committed on trunk 2020-06-03 Eric Botcazou gcc/ada/ * sem_ch12.adb (Check_Private_View): Clean up implementation of second main case, when the generic sees the private declaration. --- gcc/ada/sem_ch12.adb +++ gcc/ada/sem_ch12.adb @@ -7431,35 +7431,25 @@ package body Sem_Ch12 is and then Present (Full_View (T)) and then not In_Open_Scopes (Scope (T)) then - -- In the generic, the full type was visible. Save the private - -- entity, for subsequent exchange. + -- In the generic, the full declaration was visible Switch_View (T); elsif Has_Private_View (N) and then not Is_Private_Type (T) and then not Has_Been_Exchanged (T) - and then Etype (Get_Associated_Node (N)) /= T + and then (not In_Open_Scopes (Scope (T)) + or else Nkind (Parent (N)) = N_Subtype_Declaration) then - -- Only the private declaration was visible in the generic. If - -- the type appears in a subtype declaration, the subtype in the + -- In the generic, only the private declaration was visible + + -- If the type appears in a subtype declaration, the subtype in -- instance must have a view compatible with that of its parent, -- which must be exchanged (see corresponding code in Restore_ - -- Private_Views). Otherwise, if the type is defined in a parent - -- unit, leave full visibility within instance, which is safe. - - if In_Open_Scopes (Scope (Base_Type (T))) - and then not Is_Private_Type (Base_Type (T)) - and then Comes_From_Source (Base_Type (T)) - then - null; + -- Private_Views) so we make an exception to the open scope rule. - elsif Nkind (Parent (N)) = N_Subtype_Declaration - or else not In_Private_Part (Scope (Base_Type (T))) - then - Prepend_Elmt (T, Exchanged_Views); - Exchange_Declarations (Etype (Get_Associated_Node (N))); - end if; + Prepend_Elmt (T, Exchanged_Views); + Exchange_Declarations (Etype (Get_Associated_Node (N))); -- For composite types with inconsistent representation exchange -- component types accordingly.