Commit bd769c83 by Eric Botcazou Committed by Eric Botcazou

decl.c (gnat_to_gnu_entity): For a definition of a type coming from a limited_with...

	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Incomplete_Type>: For a
	definition of a type coming from a limited_with, get to the full view
	if it is not in the main code unit.

From-SVN: r223919
parent 2b50232a
2015-06-01 Eric Botcazou <ebotcazou@adacore.com> 2015-06-01 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Incomplete_Type>: For a
definition of a type coming from a limited_with, get to the full view
if it is not in the main code unit.
2015-06-01 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/utils.c (create_var_decl_1): If an assembler name is * gcc-interface/utils.c (create_var_decl_1): If an assembler name is
specified, let the target mangle it before settting. specified, let the target mangle it before settting.
(create_subprog_decl): Likewise and move this treatment last. (create_subprog_decl): Likewise and move this treatment last.
......
...@@ -4638,13 +4638,15 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) ...@@ -4638,13 +4638,15 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
case E_Record_Type_With_Private: case E_Record_Type_With_Private:
case E_Record_Subtype_With_Private: case E_Record_Subtype_With_Private:
{ {
bool is_from_limited_with
= (IN (kind, Incomplete_Kind) && From_Limited_With (gnat_entity));
/* Get the "full view" of this entity. If this is an incomplete /* Get the "full view" of this entity. If this is an incomplete
entity from a limited with, treat its non-limited view as the entity from a limited with, treat its non-limited view as the
full view. Otherwise, use either the full view or the underlying full view. Otherwise, use either the full view or the underlying
full view, whichever is present. This is used in all the tests full view, whichever is present. This is used in all the tests
below. */ below. */
Entity_Id full_view Entity_Id full_view
= (IN (kind, Incomplete_Kind) && From_Limited_With (gnat_entity)) = is_from_limited_with
? Non_Limited_View (gnat_entity) ? Non_Limited_View (gnat_entity)
: Present (Full_View (gnat_entity)) : Present (Full_View (gnat_entity))
? Full_View (gnat_entity) ? Full_View (gnat_entity)
...@@ -4680,10 +4682,15 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) ...@@ -4680,10 +4682,15 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
/* Otherwise, if we are not defining the type now, get the type /* Otherwise, if we are not defining the type now, get the type
from the full view. But always get the type from the full view from the full view. But always get the type from the full view
for define on use types, since otherwise we won't see them! */ for define on use types, since otherwise we won't see them.
Likewise if this is a non-limited view not declared in the main
unit, which can happen for incomplete formal types instantiated
on a type coming from a limited_with clause. */
else if (!definition else if (!definition
|| (Is_Itype (full_view) && No (Freeze_Node (gnat_entity))) || (Is_Itype (full_view) && No (Freeze_Node (gnat_entity)))
|| (Is_Itype (gnat_entity) && No (Freeze_Node (full_view)))) || (Is_Itype (gnat_entity) && No (Freeze_Node (full_view)))
|| (is_from_limited_with
&& !In_Extended_Main_Code_Unit (full_view)))
{ {
gnu_decl = gnat_to_gnu_entity (full_view, NULL_TREE, 0); gnu_decl = gnat_to_gnu_entity (full_view, NULL_TREE, 0);
maybe_present = true; maybe_present = true;
......
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