diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-06-06 10:24:40 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-06-06 10:24:40 +0000 |
commit | 8d9921953c68ea93e2bdcfcb0207c2d8a80b3772 (patch) | |
tree | c928df246f8400dd4a71f7151bc3fefb4bb99800 /gcc/ada/sem_attr.ads | |
parent | 64aad6124f7e9b6385f266e4fb7640146f4d0b25 (diff) | |
download | gcc-8d9921953c68ea93e2bdcfcb0207c2d8a80b3772.tar.gz |
2007-04-20 Hristian Kirtchev <kirtchev@adacore.com>
Robert Dewar <dewar@adacore.com>
Ed Schonberg <schonberg@adacore.com>
Gary Dismukes <dismukes@adacore.com>
* exp_ch2.adb: Remove "with" and "use" clauses for Namet and Snames.
Add "with" and "use" clauses for Sem_Attr.
(Expand_Current_Value): Do not replace occurences of attribute
references where the prefix must be a simple name.
* sem_attr.ads, sem_attr.adb: Remove "with" and "use" clauses for
Namet. Add new arrays Attribute_Name_Modifies_Prefix and
Attribute_Requires_Simple_Name_Prefix.
(Name_Modifies_Prefix): Body of new function.
(Requires_Simple_Name_Prefix): Body of new function.
(Resolve_Attribute, case Access): Improve error message for case of
mismatched conventions.
(Analyze_Attribute, case 'Tag): The prefix the attribute cannot be of an
incomplete type.
(Analyze_Attribute, case 'Access): If the type of the prefix is a
constrained subtype for a nominal unconstrained type, use its base type
to check for conformance with the context.
(Resolve_Attribute): Remove test of the access type being associated
with a return statement from condition for performing accessibility
checks on access attributes, since this case is now captured by
Is_Local_Anonymous_Access.
(Analyze_Access_Attribute): Set Address_Taken on entity
(Analyze_Attribute, case Address): Set Address_Taken on entity
(OK_Self_Reference): Traverse tree to locate enclosing aggregate when
validating an access attribute whose prefix is a current instance.
(Resolve_Attribute): In case of attributes 'Code_Address and 'Address
applied to dispatching operations, if freezing is required then we set
the attribute Has_Delayed_Freeze in the prefix's entity.
(Check_Local_Access): Set flag Suppress_Value_Tracking_On_Call in
current scope if access of local subprogram taken
(Analyze_Access_Attribute): Check legality of self-reference even if the
expression comes from source, as when a single component association in
an aggregate has a box association.
(Resolve_Attribute, case 'Access): Do not apply accessibility checks to
the prefix if it is a protected operation and the attribute is
Unrestricted_Access.
(Resolve_Attribute, case 'Access): Set the Etype of the attribute
reference to the base type of the context, to force a constraint check
when the context is an access subtype with an explicit constraint.
(Analyze_Attribute, case 'Class): If the prefix is an interface and the
node is rewritten as an interface conversion. leave unanalyzed after
resolution, to ensure that type checking against the context will take
place.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125395 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/sem_attr.ads')
-rw-r--r-- | gcc/ada/sem_attr.ads | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ada/sem_attr.ads b/gcc/ada/sem_attr.ads index c80852aa7d9..6e15eaf720d 100644 --- a/gcc/ada/sem_attr.ads +++ b/gcc/ada/sem_attr.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2006, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2007, 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- -- @@ -32,6 +32,7 @@ -- This spec also documents all GNAT implementation defined pragmas with Exp_Tss; use Exp_Tss; +with Namet; use Namet; with Snames; use Snames; with Types; use Types; @@ -541,6 +542,19 @@ package Sem_Attr is -- in appropriate contexts (i.e. in subtype marks, or as prefixes for -- other attributes). + function Name_Modifies_Prefix (Nam : Name_Id) return Boolean; + -- Determine whether the name of an attribute reference modifies the + -- contents of its prefix. "Read" is such an attribute. + + function Requires_Simple_Name_Prefix (Nam : Name_Id) return Boolean; + -- Determine whether the name of an attribute reference requires a simple + -- name rather than a value as its prefix. Such prefixes do not need to be + -- optimized. For instance in the following example: + -- I : constant Integer := 5; + -- S : constant Integer := I'Size; + -- "Size" requires a simple name prefix since "5'Size" does not make + -- sense. + procedure Resolve_Attribute (N : Node_Id; Typ : Entity_Id); -- Performs type resolution of attribute. If the attribute yields a -- universal value, mark its type as that of the context. On the other |