From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 99915 invoked by alias); 24 Mar 2015 12:26:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 99847 invoked by uid 89); 24 Mar 2015 12:26:25 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.2 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 (AES256-SHA encrypted) ESMTPS; Tue, 24 Mar 2015 12:26:24 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 2B55011636D; Tue, 24 Mar 2015 08:26:20 -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 i5qPeY-x2-9p; Tue, 24 Mar 2015 08:26:20 -0400 (EDT) Received: from kwai.gnat.com (kwai.gnat.com [205.232.38.4]) by rock.gnat.com (Postfix) with ESMTP id 1397511636B; Tue, 24 Mar 2015 08:26:20 -0400 (EDT) Received: by kwai.gnat.com (Postfix, from userid 4192) id 0D505439C0; Tue, 24 Mar 2015 08:26:20 -0400 (EDT) Date: Tue, 24 Mar 2015 12:26:00 -0000 From: Arnaud Charlet To: gcc-patches@gcc.gnu.org Cc: Robert Dewar Subject: [Ada] New attribute typ'Deref (address-expr) Message-ID: <20150324122620.GA26210@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="4Ckj6UjgE2iN1+kY" Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-SW-Source: 2015-03/txt/msg01244.txt.bz2 --4Ckj6UjgE2iN1+kY Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 933 This attribute is equivalent to (atyp!(address-expr)).all where atyp is a general-access-to-typ type. Right now, only the front end changes are done. The back end needs to adapt to this change too. The following is a test which should compile and run silently 1. with System; use System; 2. procedure Deref_Test is 3. X : Integer := 4; 4. Y : Address := X'Address; 5. begin 6. if Integer'Deref (Y) /= 4 then 7. raise Program_Error; 8. end if; 9. end Deref_Test; For now it will blow up with a GCC error in the back end, which does not know about this attribute yet. Tested on x86_64-pc-linux-gnu, committed on trunk 2015-03-24 Robert Dewar * exp_attr.adb: Add entry for typ'Deref. * sem_attr.adb (Deref): New GNAT attribute. * sem_attr.ads: Add entry for new GNAT attribute Deref. * snames.ads-tmpl: Add entries for new attribute Deref. --4Ckj6UjgE2iN1+kY Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=difs Content-length: 4445 Index: exp_attr.adb =================================================================== --- exp_attr.adb (revision 221624) +++ exp_attr.adb (working copy) @@ -7103,6 +7103,7 @@ when Attribute_Bit_Order | Attribute_Code_Address | Attribute_Definite | + Attribute_Deref | Attribute_Null_Parameter | Attribute_Passed_By_Reference | Attribute_Pool_Address | Index: sem_attr.adb =================================================================== --- sem_attr.adb (revision 221624) +++ sem_attr.adb (working copy) @@ -3540,6 +3540,16 @@ Check_Floating_Point_Type_0; Set_Etype (N, Standard_Boolean); + ----------- + -- Deref -- + ----------- + + when Attribute_Deref => + Check_Type; + Check_E1; + Resolve (E1, RTE (RE_Address)); + Set_Etype (N, P_Type); + --------------------- -- Descriptor_Size -- --------------------- @@ -9642,6 +9652,7 @@ Attribute_Count | Attribute_Default_Bit_Order | Attribute_Default_Scalar_Storage_Order | + Attribute_Deref | Attribute_Elaborated | Attribute_Elab_Body | Attribute_Elab_Spec | Index: sem_attr.ads =================================================================== --- sem_attr.ads (revision 221624) +++ sem_attr.ads (working copy) @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -42,9 +42,9 @@ -- Implementation Dependent Attributes -- ----------------------------------------- - -- This section describes the implementation dependent attributes - -- provided in GNAT, as well as constructing an array of flags - -- indicating which attributes these are. + -- This section describes the implementation dependent attributes provided + -- in GNAT, as well as constructing an array of flags indicating which + -- attributes these are. Attribute_Impl_Def : Attribute_Class_Array := Attribute_Class_Array'( @@ -152,6 +152,17 @@ -- Default_Scalar_Storage_Order, or equal to Default_Bit_Order if -- unspecified) as a System.Bit_Order value. This is a static attribute. + ----------- + -- Deref -- + ----------- + + Attribute_Deref => True, + -- typ'Deref (expr) is valid only if expr is of type System'Address. + -- The result is an object of type typ that is obtained by treating the + -- address as an access-to-typ value that points to the result. It is + -- basically equivalent to (atyp!expr).all where atyp is an access type + -- for the type. + --------------- -- Elab_Body -- --------------- Index: snames.ads-tmpl =================================================================== --- snames.ads-tmpl (revision 221624) +++ snames.ads-tmpl (working copy) @@ -845,6 +845,7 @@ Name_Definite : constant Name_Id := N + $; Name_Delta : constant Name_Id := N + $; Name_Denorm : constant Name_Id := N + $; + Name_Deref : constant Name_Id := N + $; -- GNAT Name_Descriptor_Size : constant Name_Id := N + $; Name_Digits : constant Name_Id := N + $; Name_Elaborated : constant Name_Id := N + $; -- GNAT @@ -1476,6 +1477,7 @@ Attribute_Definite, Attribute_Delta, Attribute_Denorm, + Attribute_Deref, Attribute_Descriptor_Size, Attribute_Digits, Attribute_Elaborated, --4Ckj6UjgE2iN1+kY--