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> 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 * gcc-interface/trans.c (elaborate_all_entities_for_package): Also do
not elaborate Itypes. not elaborate Itypes.
......
...@@ -4009,9 +4009,12 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) ...@@ -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_Access_Protected_Subprogram_Type:
case E_Anonymous_Access_Protected_Subprogram_Type: case E_Anonymous_Access_Protected_Subprogram_Type:
/* The run-time representation is the equivalent type. */ /* If we are just annotating types and have no equivalent record type,
if (type_annotate_only && No (gnat_equiv_type)) just return ptr_void_type. */
if (type_annotate_only && gnat_equiv_type == gnat_entity)
gnu_type = ptr_type_node; gnu_type = ptr_type_node;
/* The run-time representation is the equivalent type. */
else else
{ {
gnu_type = gnat_to_gnu_type (gnat_equiv_type); 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) ...@@ -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 just return void_type, except for root types that have discriminants
because the discriminants will very likely be used in the declarative because the discriminants will very likely be used in the declarative
part of the associated body so they need to be translated. */ 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) if (Has_Discriminants (gnat_entity)
&& Root_Type (gnat_entity) == gnat_entity) && Root_Type (gnat_entity) == gnat_entity)
...@@ -5143,26 +5146,26 @@ Gigi_Equivalent_Type (Entity_Id gnat_entity) ...@@ -5143,26 +5146,26 @@ Gigi_Equivalent_Type (Entity_Id gnat_entity)
case E_Access_Protected_Subprogram_Type: case E_Access_Protected_Subprogram_Type:
case E_Anonymous_Access_Protected_Subprogram_Type: case E_Anonymous_Access_Protected_Subprogram_Type:
gnat_equiv = Equivalent_Type (gnat_entity); if (Present (Equivalent_Type (gnat_entity)))
gnat_equiv = Equivalent_Type (gnat_entity);
break; break;
case E_Class_Wide_Type: case E_Class_Wide_Type:
gnat_equiv = Root_Type (gnat_entity); gnat_equiv = Root_Type (gnat_entity);
break; break;
case E_Task_Type:
case E_Task_Subtype:
case E_Protected_Type: case E_Protected_Type:
case E_Protected_Subtype: case E_Protected_Subtype:
gnat_equiv = Corresponding_Record_Type (gnat_entity); case E_Task_Type:
case E_Task_Subtype:
if (Present (Corresponding_Record_Type (gnat_entity)))
gnat_equiv = Corresponding_Record_Type (gnat_entity);
break; break;
default: default:
break; break;
} }
gcc_assert (Present (gnat_equiv) || type_annotate_only);
return gnat_equiv; 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