diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2020-12-10 15:35:28 +0100 |
---|---|---|
committer | Eric Botcazou <ebotcazou@adacore.com> | 2020-12-10 15:45:16 +0100 |
commit | 237a8e8d5647e45aca2736906033291d49545a2c (patch) | |
tree | 247d418f01fe3af909e2be04b690e24cda4d2f4c | |
parent | 8c60696b699e0b22cc12ae628473f0a23f90c82e (diff) | |
download | gcc-237a8e8d5647e45aca2736906033291d49545a2c.zip gcc-237a8e8d5647e45aca2736906033291d49545a2c.tar.gz gcc-237a8e8d5647e45aca2736906033291d49545a2c.tar.bz2 |
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
-rw-r--r-- | gcc/dwarf2out.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 7b340ba..0baa056 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -18245,10 +18245,11 @@ loc_list_from_tree_1 (tree loc, int want_address, case PLACEHOLDER_EXPR: /* 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. */ + operand of COMPONENT_REF nodes and to reference precisely the type + 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) |