From patchwork Wed Aug 31 09:34:04 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnaud Charlet X-Patchwork-Id: 112485 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]) by ozlabs.org (Postfix) with SMTP id 947C4B6F80 for ; Wed, 31 Aug 2011 19:34:35 +1000 (EST) Received: (qmail 13965 invoked by alias); 31 Aug 2011 09:34:28 -0000 Received: (qmail 13869 invoked by uid 22791); 31 Aug 2011 09:34:27 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 31 Aug 2011 09:34:05 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 78B612BAB7F; Wed, 31 Aug 2011 05:34:04 -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 XizLKuDH6hSA; Wed, 31 Aug 2011 05:34:04 -0400 (EDT) Received: from kwai.gnat.com (kwai.gnat.com [205.232.38.4]) by rock.gnat.com (Postfix) with ESMTP id 65FC02BAB48; Wed, 31 Aug 2011 05:34:04 -0400 (EDT) Received: by kwai.gnat.com (Postfix, from userid 4192) id 63EE73FEE8; Wed, 31 Aug 2011 05:34:04 -0400 (EDT) Date: Wed, 31 Aug 2011 05:34:04 -0400 From: Arnaud Charlet To: gcc-patches@gcc.gnu.org Cc: Bob Duff Subject: [Ada] Fix spurious "prefix of dereference must be an access type" Message-ID: <20110831093404.GA19957@adacore.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-06-14) 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 This patch fixes an obscure bug, in which an error "prefix of dereference must be an access type" is given incorrectly. The spurious error would occur in an instance of a generic if an implicit dereference of an expression of a private type is used. No simple test is available. Tested on x86_64-pc-linux-gnu, committed on trunk 2011-08-31 Bob Duff * exp_ch4.adb (Expand_N_Selected_Component): Use the full type, in case the access type is private; we don't care about privacy in expansion. Index: exp_ch4.adb =================================================================== --- exp_ch4.adb (revision 178368) +++ exp_ch4.adb (working copy) @@ -7920,6 +7920,7 @@ -- Insert explicit dereference if required if Is_Access_Type (Ptyp) then + Set_Etype (P, Ptyp); -- in case it's private Insert_Explicit_Dereference (P); Analyze_And_Resolve (P, Designated_Type (Ptyp));