Fix PR ada/98740
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 19 Jan 2021 09:43:15 +0000 (10:43 +0100)
committerEric Botcazou <ebotcazou@adacore.com>
Tue, 19 Jan 2021 09:44:54 +0000 (10:44 +0100)
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

index 4ab26d3e2dd7889f4b4d9a8542ffb7739138cb77..6402c73ded053c3be419cdbed8e368333542dd01 100644 (file)
@@ -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