Small fix to PLACEHOLDER_EXPR handling in loc_list_from_tree_1

This handles the discriminated record types of Ada: the PLACEHOLDER_EXPR is
the "template" expression for the discriminant in the type definition. Now
for some components, typically arrays whose upper bound is the discriminant,
the compiler creates a local subtype for the component, so the code needs to
be able to deal with this nested type.

gcc/ChangeLog:
	* dwarf2out.c (loc_list_from_tree_1) <PLACEHOLDER_EXPR>: Deal with
	a nested context type
This commit is contained in:
Eric Botcazou 2020-12-10 15:35:28 +01:00
parent 8c60696b69
commit 237a8e8d56
1 changed files with 4 additions and 3 deletions

View File

@ -18246,9 +18246,10 @@ loc_list_from_tree_1 (tree loc, int want_address,
/* This case involves extracting fields from an object to determine the
position of other fields. It is supposed to appear only as the first
operand of COMPONENT_REF nodes and to reference precisely the type
that the context allows. */
that the context allows or its enclosing type. */
if (context != NULL
&& TREE_TYPE (loc) == context->context_type
&& (TREE_TYPE (loc) == context->context_type
|| TREE_TYPE (loc) == TYPE_CONTEXT (context->context_type))
&& want_address >= 1)
{
if (dwarf_version >= 3 || !dwarf_strict)