From 665e80ca5ec84ccf77d5e18d7ca802d38d5e270d Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 19 Jan 2021 10:43:15 +0100 Subject: [PATCH] Fix PR ada/98740 It's a long-standing GENERIC tree sharing issue. gcc/ada/ChangeLog: PR ada/98740 * gcc-interface/trans.c (add_decl_expr): Always mark TYPE_ADA_SIZE. --- gcc/ada/gcc-interface/trans.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 4ab26d3e2dd..6402c73ded0 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -8479,15 +8479,16 @@ add_decl_expr (tree gnu_decl, Node_Id gnat_node) MARK_VISITED (DECL_SIZE_UNIT (gnu_decl)); MARK_VISITED (DECL_INITIAL (gnu_decl)); } - /* In any case, we have to deal with our own TYPE_ADA_SIZE field. */ - else if (TREE_CODE (gnu_decl) == TYPE_DECL - && RECORD_OR_UNION_TYPE_P (type) - && !TYPE_FAT_POINTER_P (type)) - MARK_VISITED (TYPE_ADA_SIZE (type)); } else add_stmt_with_node (gnu_stmt, gnat_node); + /* Mark our TYPE_ADA_SIZE field now since it will not be gimplified. */ + if (TREE_CODE (gnu_decl) == TYPE_DECL + && RECORD_OR_UNION_TYPE_P (type) + && !TYPE_FAT_POINTER_P (type)) + MARK_VISITED (TYPE_ADA_SIZE (type)); + /* If this is a variable and an initializer is attached to it, it must be valid for the context. Similar to init_const in create_var_decl. */ if (TREE_CODE (gnu_decl) == VAR_DECL -- 2.30.2