From patchwork Mon Sep 15 13:01:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Marc_Poulhi=C3=A8s?= X-Patchwork-Id: 120279 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 458833857B8F for ; Mon, 15 Sep 2025 13:34:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 458833857B8F Authentication-Results: sourceware.org; dkim=pass (2048-bit key, secure) header.d=adacore.com header.i=@adacore.com header.a=rsa-sha256 header.s=google header.b=KrZ0hLBl X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by sourceware.org (Postfix) with ESMTPS id 02A493857439 for ; Mon, 15 Sep 2025 13:02:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 02A493857439 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 02A493857439 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::42f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1757941330; cv=none; b=CvXvCeZ2roUO6n6mxlIFDIu47JifF4Vijeg/9tjBpyUvkEit2xYqI+rN4rddJFq7J02+rZenPh21SvLtFiN6Am4MQIosvLSNRf9JXX2IDgFQXlBYgUGPizBeLus6ETY3xBarVBjKPST03fRm3dJ1rBQdN3t8epAUPKgYHfEeBys= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1757941330; c=relaxed/simple; bh=rZ/DOB5HkVCOREXJVOdZfP6hWxNbfTw/p4LhxAAnqRY=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=bavi/LMyM6smR776vEMvkmREbU8xHO2NlBYU7GSAl/rkrqfLjFkK4O0VTNgDjW9Kdzeh/nYgel3gv1WlMiafBx1qMMCUtAExoEoFLdL/7OEX6NzwKzfzMkc2EUBfx8L1TQTrqW/wWwBOGtMR9jgWdwo9BkQpT82wOMsOC2/Qhg0= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 02A493857439 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-3c46686d1e6so2958414f8f.3 for ; Mon, 15 Sep 2025 06:02:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1757941328; x=1758546128; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=J9kC5XRRhFSJ5WDVPjkNGZozwOxUyFp7mZ4T3QBjH7U=; b=KrZ0hLBl04ogm1ZrFc9HwuFwK9XNeciH6om6sSaZMoKs1wJQ0q60v7CprxRiSMI6Mg 8o6Q0VCleMdOdCypvHpqEO1iPP5kD9GmyIhYJO5CCwVFtuXL5gtrC9W0A7I6evwJd8Pt z20OnmmNegq5nHhmP+1Y60G1xhIMLPahMZq9S+Gv7SKnIv44aRhTJHgM3H6vgl84AF4k BJwW0idqhMyX8cYqRg2X+XYr3QHoe15Zqp5mqJL7SnIFT1GiEOUx60UXPgdEWkJBFtdM QtO/Rfyj0Ua0yb3BTEj5JFZwZ5ip4PUtqSCvNr86+hvwuGr99n3K6IgS36hiSmQl/9GC UOTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757941328; x=1758546128; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=J9kC5XRRhFSJ5WDVPjkNGZozwOxUyFp7mZ4T3QBjH7U=; b=TP1RSBkC7wnNiBwIfp8W5IDPykb04A4prBWFmtCLl3Y8bXgvyDK4V8FxmnNBQzPKo8 SWSpy5EKzGCrfdyhR2as5L2hD32+lo3OBxuVwZD9bnNQxniiBzyV+L3OYWnR1gN9Kig7 TKmPXPw2qnAoBNGqfy1DxTlJ4aNttThffM5ZBdsQ6/NE18O5nPn1rPqly449/BRUxd4T sPpIrV3IAmMsPIYhjIZQIPwaEiSArRlC7YoM8XRadyXNDCJlAzNbctFpASkSXatjTue+ JrsEyYxdoqRIFPDOBYdeW94aUqvaz7sI+hiBRRej7IdO3WRzS7aNq9DoE/Aly7d+KbKU WgVw== X-Gm-Message-State: AOJu0Yxou9qjWdfW9mhYdh8vzlyCsjnWH/8nBiZmc3NgC8/VujESyrn5 L+qaG5vNps4mSrgv+qSivOCXGCQN7C/45L8qIi6evi6+gLDhkFQCEi1pQr9ou86re1eOAeWY6Td awL0= X-Gm-Gg: ASbGncuE+f0ZYhT00jTjNDBptit/tU3UI8Cw+/Pd7qnVKkddCCXDmtu1iBqMVFgFwW+ n8jQqfwVT/VWV1xOvV8+yyFeRtaY7j9R6vNY0y55TMSsj/jBpThwvCCIgO6drDrQ1gYceyfwzz/ WLreMrRFCYkoJnBtCZ0wetnAVaAtGBaAIZRKTTXGTO8tByfZMJMEFLRIV7eygZJR98qeS7ZK4nE Q9seyRAZ8abq6O/yzzw+pN+IGYOGI6YghEoZSoJ7QRr4RkiWhRlGtn0GA0QII0mcMpLYRNmQfdh cq2v93XjyJ2G+oHNTOBFwrM3VBvq5XvJszsWSm1yXKQQLMLD9j7Z7HyLrdPWba9reW9Zp1GyETM 5Zu934MzUfdDEItyUUjVlf4lhohNc630zebOd3UxGZFAAMU1Gk/sQ+Irmj9mT4MHLf5Rq5QFkxR J1/e/KouElzReFKi3Y4YEjXTOSOqahR92xDuzQcA== X-Google-Smtp-Source: AGHT+IHPXXXid/ahmasNG7PVCWSSj5FZHqSEOGma8wy5xBW1/DUTLViR4GxV968ImlWL/dxMzQm3/Q== X-Received: by 2002:a05:6000:430c:b0:3e9:d34c:17a0 with SMTP id ffacd0b85a97d-3e9d34c1a24mr4200364f8f.34.1757941327666; Mon, 15 Sep 2025 06:02:07 -0700 (PDT) Received: from poulhies-Precision-5550.telnowedge.local (lmontsouris-659-1-24-67.w81-250.abo.wanadoo.fr. [81.250.175.67]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3ea4b52b7fcsm5428733f8f.33.2025.09.15.06.02.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Sep 2025 06:02:07 -0700 (PDT) From: =?utf-8?q?Marc_Poulhi=C3=A8s?= To: gcc-patches@gcc.gnu.org Cc: Steve Baird Subject: [COMMITTED 21/27] ada: C_Pass_By_Copy convention incorrectly ignored Date: Mon, 15 Sep 2025 15:01:27 +0200 Message-ID: <20250915130135.2720894-21-poulhies@adacore.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250915130135.2720894-1-poulhies@adacore.com> References: <20250915130135.2720894-1-poulhies@adacore.com> MIME-Version: 1.0 X-Spam-Status: No, score=-13.8 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 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org From: Steve Baird In some cases involving a convention-C anonymous access-to-subprogram type with a parameter whose type has a convention of C_Pass_By_Copy, that C_Pass_By_Copy convention is incorrectly ignored. gcc/ada/ChangeLog: * freeze.adb (Freeze_Entity): In the case of an anonymous access-to-subprogram type where Do_Freeze_Profile is True, freeze the designated subprogram type. (Should_Freeze_Type): Do not call Unit_Declaration_Node with a parentless argument. * sem_ch3.adb (Analyze_Object_Declaration): When calling Freeze_Before, override the default value for Do_Freeze_Profile. This is needed in some cases to prevent premature freezing in the case of an object of an anonymous access-to-subprogram type. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/freeze.adb | 26 +++++++++++++++++++++++++- gcc/ada/sem_ch3.adb | 5 ++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 9de4fa409c0f..346789ff7573 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -6790,6 +6790,27 @@ package body Freeze is Set_Is_Frozen (E); + -- Freeze profile of anonymous access-to-subprogram type + + if Do_Freeze_Profile + and then Ekind (E) = E_Anonymous_Access_Subprogram_Type + then + declare + Skip_Because_In_Generic : constant Boolean := + In_Generic_Scope (E) or else + (Is_Itype (E) + and then Nkind (Parent (Associated_Node_For_Itype (E))) + = N_Generic_Subprogram_Declaration); + begin + if not Skip_Because_In_Generic then + if not Freeze_Profile (Designated_Type (E)) then + goto Leave; + end if; + Freeze_Subprogram (Designated_Type (E)); + end if; + end; + end if; + -- Case of entity being frozen is other than a type if not Is_Type (E) then @@ -11032,7 +11053,10 @@ package body Freeze is E : Entity_Id; N : Node_Id) return Boolean is - Decl : constant Node_Id := Original_Node (Unit_Declaration_Node (E)); + Decl : constant Node_Id := + (if Ekind (E) = E_Subprogram_Type and then No (Parent (E)) + then Empty + else Original_Node (Unit_Declaration_Node (E))); function Is_Dispatching_Call_Or_Tagged_Result_Or_Aggregate (N : Node_Id) return Traverse_Result; diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 5978d6779586..293682eef39d 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -4632,7 +4632,10 @@ package body Sem_Ch3 is Set_Has_Delayed_Freeze (T); elsif not Preanalysis_Active then - Freeze_Before (N, T); + -- Do_Freeze_Profile matters in the case of an object + -- of an anonymous access-to-subprogram type. + + Freeze_Before (N, T, Do_Freeze_Profile => False); end if; end if;