From patchwork Thu May 19 14:16:24 2022 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: 54229 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 386CD3838023 for ; Thu, 19 May 2022 14:40:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 386CD3838023 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1652971206; bh=k58qMV2vzjVqnkQJ2H4bmxVGJzV/sL7OtjZ1BeEuVsw=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=WY0qEuMPs2Kcfftb/YJLuX+SFt22Bwr4cfA6MtN/xYAEg6EfKyP9Fyb3n0GPCQJJ5 hQb9JTh9RegFKSCkGqb6LrEQxPefzL8nztYcuqMGxyJSGX60obhH0b6ek0mrqoHf5R 4lB+oAMUrfMJK7vf1u8uKwXuCGQoYphNr5SpAeOE= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by sourceware.org (Postfix) with ESMTPS id 5FC47383D82B for ; Thu, 19 May 2022 14:16:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5FC47383D82B Received: by mail-wm1-x333.google.com with SMTP id l38-20020a05600c1d2600b00395b809dfbaso2784614wms.2 for ; Thu, 19 May 2022 07:16:27 -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=k58qMV2vzjVqnkQJ2H4bmxVGJzV/sL7OtjZ1BeEuVsw=; b=XM9zpcQoNev8P14CcLqV/gwNy7/pdYGhUNsnvKaBDTWr4zFfFXZmkfS0rqnG8kcqyI odRJBtSHFGCsMzYyQSBrieIdCn21BF078dkASi0YSUhkgrbOy598WMmtmJB/fjrlCqRa +QX+j2tMNqugrT5M69QaBPUXvSaMy9MLyf4xSpkX0n0cgRJ4rBTwGGA76zgSRKjzzg0M 7oLWNAcu8SxaUliYt4vBzQor9D41obA/88A8EfImrRsxljIo/cQRtw/xBy+2WF0/LCP2 FNGQOOXYePm/KXv/VUHsKi3al/IxR0zg/z4kJFoKon5CyCFtZlTLJnrrMpNbYM8zQZ2S Qc6w== X-Gm-Message-State: AOAM531PrxEzDhPaoSfDJoke5S4nrldH9gmzc1Z2IE0C9CYgmNR/nQ3U F88fVQWEdqCnuYztQfIhAA/PvEqCVTCg5w== X-Google-Smtp-Source: ABdhPJwuvvR58uchnETga8cxf4v5bwTvuulFgrAFIRgvrf5/BvaJfsupYht439R2HQ5S9kw1ER5w2A== X-Received: by 2002:a05:600c:1e28:b0:394:8f2a:e266 with SMTP id ay40-20020a05600c1e2800b003948f2ae266mr4029016wmb.112.1652969786080; Thu, 19 May 2022 07:16:26 -0700 (PDT) Received: from adacore.com ([45.147.211.82]) by smtp.gmail.com with ESMTPSA id k1-20020adfb341000000b0020d07d90b71sm5147099wrd.66.2022.05.19.07.16.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 May 2022 07:16:25 -0700 (PDT) Date: Thu, 19 May 2022 14:16:24 +0000 To: gcc-patches@gcc.gnu.org Subject: [Ada] Fix internal error on semi-circular record types Message-ID: <20220519141624.GA3723517@adacore.com> MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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-Patchwork-Original-From: Pierre-Marie de Rodat via Gcc-patches From: Pierre-Marie de Rodat Reply-To: Pierre-Marie de Rodat Cc: Eric Botcazou Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" The front-end properly computes a linear elaboration order for them, but there was a loophole in the handling of the delayed case. Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * gcc-interface/decl.cc (gnat_to_gnu_entity) : And skip the elaboration of the designated subtype when that of its base type has been delayed. diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc --- a/gcc/ada/gcc-interface/decl.cc +++ b/gcc/ada/gcc-interface/decl.cc @@ -3846,17 +3846,18 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) maybe_present = true; /* The designated subtype must be elaborated as well, if it does - not have its own freeze node. But designated subtypes created - for constrained components of records with discriminants are - not frozen by the front-end and not elaborated here, because - their use may appear before the base type is frozen and it is - not clear that they are needed in gigi. With the current model, - there is no correct place where they could be elaborated. */ + not have its own freeze node. */ if (Is_Itype (Directly_Designated_Type (gnat_entity)) && !present_gnu_tree (Directly_Designated_Type (gnat_entity)) && Is_Frozen (Directly_Designated_Type (gnat_entity)) && No (Freeze_Node (Directly_Designated_Type (gnat_entity)))) { + tree gnu_base_type = TREE_TYPE (gnu_decl); + tree gnu_desig_base_type + = TYPE_IS_FAT_POINTER_P (gnu_base_type) + ? TREE_TYPE (TREE_TYPE (TYPE_FIELDS (gnu_base_type))) + : TREE_TYPE (gnu_base_type); + /* If we are to defer elaborating incomplete types, make a dummy type node and elaborate it later. */ if (defer_incomplete_level != 0) @@ -3869,8 +3870,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) p->next = defer_incomplete_list; defer_incomplete_list = p; } - else if (!Is_Incomplete_Or_Private_Type - (Base_Type (Directly_Designated_Type (gnat_entity)))) + + /* Otherwise elaborate the designated subtype only if its base type + has already been elaborated. */ + else if (!TYPE_IS_DUMMY_P (gnu_desig_base_type)) gnat_to_gnu_entity (Directly_Designated_Type (gnat_entity), NULL_TREE, false); }