From patchwork Tue Apr 25 08:12:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnaud Charlet X-Patchwork-Id: 754632 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org 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 3wBwv64Ptxz9s80 for ; Tue, 25 Apr 2017 18:13:06 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="W994+InM"; dkim-atps=neutral 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=LHrvLtqgE7V8cblo7AHec3Cb7KQgulPA/jvLfFqzzmzXQTKAYU eo2mQqFxLc2NfypHG5mK3uex0qVfiBJ8lmzD3z1OpicbPLeRX6/q9GmdOWH7m790 31MzZk9Sqk9+WC1Kd8tZQCthxp7nSF3XASVgrmiHcftzWr0R7DFNTC28U= 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=T20qYdNCPJkMfnZNZ/+Jx82OtJM=; b=W994+InMyjVNdr3wcb0z 8Kfuc7QYbSqP4WQxfom5ErPB8LHWK8p/iavHXuZV4CUgTXmtoBEFKpjfoBnOooYW px0aGa/1qUG0mNPFkzGbEn2KGbuRvlZHTriNx1qqAo21o97Vi6Hq+gBoNc1XHgjv /aoCAtWpwHFQVZ7ai3I2ldk= Received: (qmail 24817 invoked by alias); 25 Apr 2017 08:12:52 -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 24189 invoked by uid 89); 25 Apr 2017 08:12:46 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No 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, T_FILL_THIS_FORM_SHORT autolearn=ham version=3.3.2 spammy=miranda, Miranda, javier, Javier 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; Tue, 25 Apr 2017 08:12:45 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id E473729D9C; Tue, 25 Apr 2017 04:12:45 -0400 (EDT) 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 7auj1VFdD54e; Tue, 25 Apr 2017 04:12:45 -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 D24B22970B; Tue, 25 Apr 2017 04:12:45 -0400 (EDT) Received: by tron.gnat.com (Postfix, from userid 4192) id D0D82521; Tue, 25 Apr 2017 04:12:45 -0400 (EDT) Date: Tue, 25 Apr 2017 04:12:45 -0400 From: Arnaud Charlet To: gcc-patches@gcc.gnu.org Cc: Javier Miranda Subject: [Ada] Spurious error on subtypes of private tagged types Message-ID: <20170425081245.GA36962@adacore.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) When a private tagged record type has some component whose type is the public declaration of a private subtype the compiler may report an spurious error on invalid conversion. The same error may be also reported on package instantiations when the actual type of some generic formal is a private type that is used in the instantiation to declare a component of a tagged type declaration. After this patch the following test compiles without errors. package Pkg1 is type Bounded_String is private; private type Super_String (Max_Length : Positive) is record null; end record; type Bounded_String is new Super_String (10); end; with Pkg1; package Pkg2 is type Key_Type is private; private type Key_Type is new Pkg1.Bounded_String; end; package Pkg2.Child is subtype A_T is Key_Type; -- Test private type Derived is tagged record X : A_T; -- Test end record; end; Command: gcc -c pkg2-child.ads Tested on x86_64-pc-linux-gnu, committed on trunk 2017-04-25 Javier Miranda * exp_attr.adb (Rewrite_Stream_Proc_Call): Handle subtypes of private types when performing the view conversion. Index: exp_attr.adb =================================================================== --- exp_attr.adb (revision 247135) +++ exp_attr.adb (working copy) @@ -1650,8 +1650,8 @@ -- Perform a view conversion when either the argument or the -- formal parameter are of a private type. - if Is_Private_Type (Formal_Typ) - or else Is_Private_Type (Item_Typ) + if Is_Private_Type (Base_Type (Formal_Typ)) + or else Is_Private_Type (Base_Type (Item_Typ)) then Rewrite (Item, Unchecked_Convert_To (Formal_Typ, Relocate_Node (Item)));