Commit fbb1c7d4 by Eric Botcazou

decl.c (gnat_to_gnu_entity): Skip regular processing for Itypes that are E_Access_Subtype.

	* gcc-interface/decl.c (gnat_to_gnu_entity): Skip regular processing
	for Itypes that are E_Access_Subtype.
	<E_Access_Subtype>: Use the DECL of the base type directly.

From-SVN: r248323
parent 61890ff2
2017-05-22 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_entity): Skip regular processing
for Itypes that are E_Access_Subtype.
<E_Access_Subtype>: Use the DECL of the base type directly.
2017-05-22 Ed Schonberg <schonberg@adacore.com> 2017-05-22 Ed Schonberg <schonberg@adacore.com>
Eric Botcazou <ebotcazou@adacore.com> Eric Botcazou <ebotcazou@adacore.com>
......
...@@ -310,11 +310,13 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) ...@@ -310,11 +310,13 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
/* Contains the list of attributes directly attached to the entity. */ /* Contains the list of attributes directly attached to the entity. */
struct attrib *attr_list = NULL; struct attrib *attr_list = NULL;
/* Since a use of an Itype is a definition, process it as such if it /* Since a use of an Itype is a definition, process it as such if it is in
is not in a with'ed unit. */ the main unit, except for E_Access_Subtype because it's actually a use
of its base type, see below. */
if (!definition if (!definition
&& is_type && is_type
&& Is_Itype (gnat_entity) && Is_Itype (gnat_entity)
&& Ekind (gnat_entity) != E_Access_Subtype
&& !present_gnu_tree (gnat_entity) && !present_gnu_tree (gnat_entity)
&& In_Extended_Main_Code_Unit (gnat_entity)) && In_Extended_Main_Code_Unit (gnat_entity))
{ {
...@@ -3823,7 +3825,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) ...@@ -3823,7 +3825,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
case E_Access_Subtype: case E_Access_Subtype:
/* We treat this as identical to its base type; any constraint is /* We treat this as identical to its base type; any constraint is
meaningful only to the front-end. */ meaningful only to the front-end. */
gnu_type = gnat_to_gnu_type (Etype (gnat_entity)); gnu_decl = gnat_to_gnu_entity (Etype (gnat_entity), NULL_TREE, false);
saved = true;
/* The designated subtype must be elaborated as well, if it does /* The designated subtype must be elaborated as well, if it does
not have its own freeze node. But designated subtypes created not have its own freeze node. But designated subtypes created
...@@ -3855,8 +3858,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) ...@@ -3855,8 +3858,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
gnat_to_gnu_entity (Directly_Designated_Type (gnat_entity), gnat_to_gnu_entity (Directly_Designated_Type (gnat_entity),
NULL_TREE, false); NULL_TREE, false);
} }
maybe_present = true;
break; break;
/* Subprogram Entities /* Subprogram Entities
......
2017-05-22 Pierre-Marie de Rodat <derodat@adacore.com>
* gnat.dg/specs/not_null1.ads: New test.
2017-05-22 Eric Botcazou <ebotcazou@adacore.com> 2017-05-22 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/limited_with5.ad[sb]: New test. * gnat.dg/limited_with5.ad[sb]: New test.
......
-- { dg-do compile }
package Not_Null1 is
type T is null record;
type T_Access is access all T;
procedure Proc (This : in not null T_Access) is null;
type Proc_Access is access procedure (This : in not null T_Access);
PA : Proc_Access := Proc'Access;
end Not_Null1;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment