From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x235.google.com (mail-lj1-x235.google.com [IPv6:2a00:1450:4864:20::235]) by sourceware.org (Postfix) with ESMTPS id 45466385843A for ; Mon, 25 Oct 2021 15:08:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 45466385843A Received: by mail-lj1-x235.google.com with SMTP id o26so14016593ljj.2 for ; Mon, 25 Oct 2021 08:08:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition; bh=l+g/PJnFSokh9fwQ9qDB7JMgwoby/Qoj+3Q73iuuvOY=; b=b+I0TSdQiEmhnjRlJUp40uf/GQVygA3iXE1/BjAbxXzFk4jCJ7Jgc+/c/A6u5F+UaB fgnckBkseNt1RWAflzwFDavHv9exeRQzkca+1eXbL7eLcCXzj56wzwqrYPqfv/tjPn06 Q1lju7brq1z5VaScKIF4w8WTq3d2t7SZqo9ZgVCOeW2iWlEuhiXCMDIdSI64a9H2F7G9 6ttZDi0GzaDJgDGn+plKO+Ei/xP4+928fYPg60MNLkdTeYQriK9WGWYaI0wKJRe4PEJz vfYzZ4DIcwniQx9zfjO4Om/YAl6Jp5rxnqwDo7YugfnqQhCH5Y6GeLoi+hTIDiHvztos peMw== X-Gm-Message-State: AOAM531bQMiesymZ85xcPaEyBReKymuD9gW8GnyBoNPAjdJsqdxd2IqU gXvZk224dHoqzJHH5JVp6HRIX/Uil/V2Aw== X-Google-Smtp-Source: ABdhPJxuzq1bja4gkt77mjGQQXVdOG4sI3K6YuLkMucaBYn40rAQulNZK4K0IA7etOjhSxTyMJd4sA== X-Received: by 2002:a2e:551:: with SMTP id 78mr17641196ljf.519.1635174537751; Mon, 25 Oct 2021 08:08:57 -0700 (PDT) Received: from adacore.com ([2a02:2ab8:224:2ce:72b5:e8ff:feef:ee60]) by smtp.gmail.com with ESMTPSA id p3sm828631lfg.281.2021.10.25.08.08.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Oct 2021 08:08:56 -0700 (PDT) Date: Mon, 25 Oct 2021 15:08:55 +0000 From: Pierre-Marie de Rodat To: gcc-patches@gcc.gnu.org Cc: Bob Duff Subject: [Ada] Renamed_Or_Alias cleanup Message-ID: <20211025150855.GA346349@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="rwEMma7ioTxnRzrJ" Content-Disposition: inline X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: , X-List-Received-Date: Mon, 25 Oct 2021 15:09:01 -0000 --rwEMma7ioTxnRzrJ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline There are three "fields" that are aliases for the Renamed_Or_Alias field: Alias, Renamed_Entity, and Renamed_Object. The getters and setters were (mis)used more or less interchangeably, in violation of the comments. This patch adds assertions to enforce the comments, and changes all of the call sites to obey the comments, except for some call sites of [Set_]Renamed_Object involving front end inlining and generation of debug information, which are too complicated to fix and which are well isolated from the other uses. Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * einfo-utils.ads, einfo-utils.adb (Alias, Set_Alias, Renamed_Entity, Set_Renamed_Entity, Renamed_Object, Set_Renamed_Object): Add assertions that reflect how these are supposed to be used and what they are supposed to return. (Renamed_Entity_Or_Object): New getter. (Set_Renamed_Object_Of_Possibly_Void): Setter that allows N to be E_Void. * checks.adb (Ensure_Valid): Use Renamed_Entity_Or_Object because this is called for both cases. * exp_dbug.adb (Debug_Renaming_Declaration): Use Renamed_Entity_Or_Object because this is called for both cases. Add assertions. * exp_util.adb (Possible_Bit_Aligned_Component): Likewise. * freeze.adb (Freeze_All_Ent): Likewise. * sem_ch5.adb (Within_Function): Likewise. * exp_attr.adb (Calculate_Header_Size): Call Renamed_Entity instead of Renamed_Object. * exp_ch11.adb (Expand_N_Raise_Statement): Likewise. * repinfo.adb (Find_Declaration): Likewise. * sem_ch10.adb (Same_Unit, Process_Spec_Clauses, Analyze_With_Clause, Install_Parents): Likewise. * sem_ch12.adb (Build_Local_Package, Needs_Body_Instantiated, Build_Subprogram_Renaming, Check_Formal_Package_Instance, Check_Generic_Actuals, In_Enclosing_Instance, Denotes_Formal_Package, Process_Nested_Formal, Check_Initialized_Types, Map_Formal_Package_Entities, Restore_Nested_Formal): Likewise. * sem_ch6.adb (Report_Conflict): Likewise. * sem_ch8.adb (Analyze_Exception_Renaming, Analyze_Generic_Renaming, Analyze_Package_Renaming, Is_Primitive_Operator_In_Use, Declared_In_Actual, Note_Redundant_Use): Likewise. * sem_warn.adb (Find_Package_Renaming): Likewise. * sem_elab.adb (Ultimate_Variable): Call Renamed_Object instead of Renamed_Entity. * exp_ch6.adb (Get_Function_Id): Call Set_Renamed_Object_Of_Possibly_Void, because the defining identifer is still E_Void at this point. * sem_util.adb (Function_Call_Or_Allocator_Level): Likewise. Remove redundant (unreachable) code. (Is_Object_Renaming, Is_Valid_Renaming): Call Renamed_Object instead of Renamed_Entity. (Get_Fullest_View): Call Renamed_Entity instead of Renamed_Object. (Copy_Node_With_Replacement): Call Set_Renamed_Object_Of_Possibly_Void because the defining entity is sometimes E_Void. * exp_ch5.adb (Expand_N_Assignment_Statement): Protect a call to Renamed_Object with Is_Object to avoid assertion failure. * einfo.ads: Minor comment fixes. * inline.adb: Minor comment fixes. * tbuild.ads: Minor comment fixes. --rwEMma7ioTxnRzrJ Content-Type: application/gzip Content-Disposition: attachment; filename="patch.diff.gz" Content-Transfer-Encoding: base64 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 /xnT6UwangAA --rwEMma7ioTxnRzrJ--