From patchwork Mon Dec 3 15:51:43 2018 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: 1007031 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-491518-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=adacore.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="NfbeJ4qH"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 437qHZ5X5jz9sDF for ; Tue, 4 Dec 2018 02:51:54 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:mime-version:content-type; q=dns; s=default; b=FF00JuNScj3/NZHw/Uj/r59IhRdpaJkYmoUQc304kBbWVquhWL 68O7oQL8ubYYvJ5HUpGEDL71DP3jH+x2XaGKmjPbxITjv/npMgeY3VsrZVmgd6ua mf68AwV3c85wCpcA8Z95Xxz40l3yBmjjsGfQfRrXKk3JW2pAueeXCekp8= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:mime-version:content-type; s= default; bh=58c+RFz8NjpB6gLnuVTLubFqpDc=; b=NfbeJ4qHZMGL1pLvtZgs bvDJNPGGciGFY/4v0LMbV7Z8zDuBintyea0Il8Ys8sB7Ng6j7sfDeI98v7vf04mt kg/s5csmlLSJmruVOB3DtcdKhPsYZXFWgarbTSupA7gdYaMHv1/xBrNdoX/RcuhE bnP9HQHz3j4IHclmEScWRFo= Received: (qmail 32633 invoked by alias); 3 Dec 2018 15:51:47 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 32619 invoked by uid 89); 3 Dec 2018 15:51:46 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-11.9 required=5.0 tests=BAYES_00, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=artificial, Present, FAILED, gnatdg X-HELO: rock.gnat.com Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 03 Dec 2018 15:51:44 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 45A9D116574; Mon, 3 Dec 2018 10:51:43 -0500 (EST) 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 DO+P4G0GXNce; Mon, 3 Dec 2018 10:51:43 -0500 (EST) Received: from tron.gnat.com (tron.gnat.com [205.232.38.10]) by rock.gnat.com (Postfix) with ESMTP id 33651116492; Mon, 3 Dec 2018 10:51:43 -0500 (EST) Received: by tron.gnat.com (Postfix, from userid 4862) id 323D63561; Mon, 3 Dec 2018 10:51:43 -0500 (EST) Date: Mon, 3 Dec 2018 10:51:43 -0500 From: Pierre-Marie de Rodat To: gcc-patches@gcc.gnu.org Cc: Eric Botcazou Subject: [Ada] Fix problematic overloading of operator in Ada 95 mode Message-ID: <20181203155143.GA28416@adacore.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-IsSubscribed: yes The change reverts the test deciding whether an initialization procedure can be inherited from parent to derived type to the original implementation, which allowed inheriting a null procedure. This prevents the creation of another null initialization procedure for the derived type, which in turn can avoid an artificial overloading which can wreak havoc in the analysis of private declarations of a package. Tested on x86_64-pc-linux-gnu, committed on trunk 2018-12-03 Eric Botcazou gcc/ada/ * exp_ch3.adb (Build_Record_Init_Proc): Inherit an initialization procedure if it is present, even if it is null. gcc/testsuite/ * gnat.dg/overload2.adb, gnat.dg/overload2_p.adb, gnat.dg/overload2_p.ads, gnat.dg/overload2_q.adb, gnat.dg/overload2_q.ads: New testcase. --- gcc/ada/exp_ch3.adb +++ gcc/ada/exp_ch3.adb @@ -3712,7 +3712,7 @@ package body Exp_Ch3 is and then not Is_Unchecked_Union (Rec_Type) and then not Has_New_Non_Standard_Rep (Rec_Type) and then not Parent_Subtype_Renaming_Discrims - and then Has_Non_Null_Base_Init_Proc (Etype (Rec_Type)) + and then Present (Base_Init_Proc (Etype (Rec_Type))) then Copy_TSS (Base_Init_Proc (Etype (Rec_Type)), Rec_Type); --- /dev/null new file mode 100644 +++ gcc/testsuite/gnat.dg/overload2.adb @@ -0,0 +1,13 @@ +-- { dg-do compile } +-- { dg-options "-gnat95" } + +with Overload2_P; use Overload2_P; +with text_io; use text_io; +procedure overload2 is + this, that: t; + yes : boolean := this /= that; +begin + if not yes then + put_line ("FAILED"); + end if; +end; --- /dev/null new file mode 100644 +++ gcc/testsuite/gnat.dg/overload2_p.adb @@ -0,0 +1,6 @@ +-- { dg-options "-gnat95 -gnatws" } + +package body overload2_p is + function "=" (this, that: t) return boolean is begin return True; end; + this, that : t; +end; --- /dev/null new file mode 100644 +++ gcc/testsuite/gnat.dg/overload2_p.ads @@ -0,0 +1,6 @@ +with overload2_q; +package overload2_p is + type t is new overload2_q.t; +private + function "=" (this, that: t) return boolean; +end; --- /dev/null new file mode 100644 +++ gcc/testsuite/gnat.dg/overload2_q.adb @@ -0,0 +1,5 @@ +-- { dg-options "-gnat95" } + +package body overload2_q is + function "=" (this, that: t) return boolean is begin return False; end; +end; --- /dev/null new file mode 100644 +++ gcc/testsuite/gnat.dg/overload2_q.ads @@ -0,0 +1,4 @@ +package overload2_q is + type t is null record; + function "=" (this, that: t) return boolean; +end;