Commit 42a5e410 by Eric Botcazou Committed by Eric Botcazou

decl.c (Gigi_Equivalent_Type): Make sure equivalent types are present before returning them.

	* gcc-interface/decl.c (Gigi_Equivalent_Type): Make sure equivalent
	types are present before returning them.  Remove final assertion.
	(gnat_to_gnu_entity) <E_Access_Protected_Subprogram_Type>: Adjust to
	above change.
	<E_Protected_Type>: Likewise.

From-SVN: r237130
parent f8a9b81f
2016-06-06 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (Gigi_Equivalent_Type): Make sure equivalent
types are present before returning them. Remove final assertion.
(gnat_to_gnu_entity) <E_Access_Protected_Subprogram_Type>: Adjust to
above change.
<E_Protected_Type>: Likewise.
2016-06-06 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (elaborate_all_entities_for_package): Also do
not elaborate Itypes.
......
......@@ -4009,9 +4009,12 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
case E_Access_Protected_Subprogram_Type:
case E_Anonymous_Access_Protected_Subprogram_Type:
/* The run-time representation is the equivalent type. */
if (type_annotate_only && No (gnat_equiv_type))
/* If we are just annotating types and have no equivalent record type,
just return ptr_void_type. */
if (type_annotate_only && gnat_equiv_type == gnat_entity)
gnu_type = ptr_type_node;
/* The run-time representation is the equivalent type. */
else
{
gnu_type = gnat_to_gnu_type (gnat_equiv_type);
......@@ -4377,7 +4380,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
just return void_type, except for root types that have discriminants
because the discriminants will very likely be used in the declarative
part of the associated body so they need to be translated. */
if (type_annotate_only && No (gnat_equiv_type))
if (type_annotate_only && gnat_equiv_type == gnat_entity)
{
if (Has_Discriminants (gnat_entity)
&& Root_Type (gnat_entity) == gnat_entity)
......@@ -5143,6 +5146,7 @@ Gigi_Equivalent_Type (Entity_Id gnat_entity)
case E_Access_Protected_Subprogram_Type:
case E_Anonymous_Access_Protected_Subprogram_Type:
if (Present (Equivalent_Type (gnat_entity)))
gnat_equiv = Equivalent_Type (gnat_entity);
break;
......@@ -5150,10 +5154,11 @@ Gigi_Equivalent_Type (Entity_Id gnat_entity)
gnat_equiv = Root_Type (gnat_entity);
break;
case E_Task_Type:
case E_Task_Subtype:
case E_Protected_Type:
case E_Protected_Subtype:
case E_Task_Type:
case E_Task_Subtype:
if (Present (Corresponding_Record_Type (gnat_entity)))
gnat_equiv = Corresponding_Record_Type (gnat_entity);
break;
......@@ -5161,8 +5166,6 @@ Gigi_Equivalent_Type (Entity_Id gnat_entity)
break;
}
gcc_assert (Present (gnat_equiv) || type_annotate_only);
return gnat_equiv;
}
......
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