decl.c (gnat_to_gnu_entity): Do not get the expression of a dispatch table that is not being defined.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Constant>: Do not get the expression of a dispatch table that is not being defined. <E_Record_Subtype>: Remove obsolete kludge. From-SVN: r261483
This commit is contained in:
parent
81034751aa
commit
541bb35d87
|
@ -1,3 +1,9 @@
|
|||
2018-06-12 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Constant>: Do not get
|
||||
the expression of a dispatch table that is not being defined.
|
||||
<E_Record_Subtype>: Remove obsolete kludge.
|
||||
|
||||
2018-06-12 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc-interface/decl.c (warn_on_field_placement): Use specific wording
|
||||
|
|
|
@ -603,13 +603,18 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
|
|||
/* If we have a constant that we are not defining, get the expression it
|
||||
was defined to represent. This is necessary to avoid generating dumb
|
||||
elaboration code in simple cases, but we may throw it away later if it
|
||||
is not a constant. But do not retrieve it if it is an allocator since
|
||||
is not a constant. But do not do it for dispatch tables because they
|
||||
are only referenced indirectly and we need to have a consistent view
|
||||
of the exported and of the imported declarations of the tables from
|
||||
external units for them to be properly merged in LTO mode. Moreover
|
||||
simply do not retrieve the expression it if it is an allocator since
|
||||
the designated type might still be dummy at this point. Note that we
|
||||
invoke gnat_to_gnu_external and not gnat_to_gnu because the expression
|
||||
may contain N_Expression_With_Actions nodes and thus declarations of
|
||||
objects from other units that we need to discard. */
|
||||
if (!definition
|
||||
&& !No_Initialization (Declaration_Node (gnat_entity))
|
||||
&& !Is_Dispatch_Table_Entity (gnat_entity)
|
||||
&& Present (gnat_temp = Expression (Declaration_Node (gnat_entity)))
|
||||
&& Nkind (gnat_temp) != N_Allocator
|
||||
&& (!type_annotate_only || Compile_Time_Known_Value (gnat_temp)))
|
||||
|
@ -3406,20 +3411,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
|
|||
break;
|
||||
}
|
||||
|
||||
/* If this is a record subtype associated with a dispatch table,
|
||||
strip the suffix. This is necessary to make sure 2 different
|
||||
subtypes associated with the imported and exported views of a
|
||||
dispatch table are properly merged in LTO mode. */
|
||||
if (Is_Dispatch_Table_Entity (gnat_entity))
|
||||
{
|
||||
char *p;
|
||||
Get_Encoded_Name (gnat_entity);
|
||||
p = strchr (Name_Buffer, '_');
|
||||
gcc_assert (p);
|
||||
strcpy (p+2, "dtS");
|
||||
gnu_entity_name = get_identifier (Name_Buffer);
|
||||
}
|
||||
|
||||
/* When the subtype has discriminants and these discriminants affect
|
||||
the initial shape it has inherited, factor them in. But for an
|
||||
Unchecked_Union (it must be an Itype), just return the type. */
|
||||
|
|
Loading…
Reference in New Issue