aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2020-12-10 15:35:28 +0100
committerEric Botcazou <ebotcazou@adacore.com>2020-12-10 15:45:16 +0100
commit237a8e8d5647e45aca2736906033291d49545a2c (patch)
tree247d418f01fe3af909e2be04b690e24cda4d2f4c /gcc
parent8c60696b699e0b22cc12ae628473f0a23f90c82e (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/dwarf2out.c7
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)