c-ada-spec.c (dump_ada_declaration): Generate a forward declaration for a typedef...
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 1 Jun 2018 08:36:20 +0000 (08:36 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 1 Jun 2018 08:36:20 +0000 (08:36 +0000)
* c-ada-spec.c (dump_ada_declaration) <TYPE_DECL>: Generate a forward
declaration for a typedef independently of whether the declaration of
the subtype is generated.

From-SVN: r261058

gcc/c-family/ChangeLog
gcc/c-family/c-ada-spec.c

index 70245074d9c8503b5ad8a183d7bbd25e08882f0b..319e546534ada904371cb2f9e328e0d12040ce04 100644 (file)
@@ -1,3 +1,9 @@
+2018-06-01  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * c-ada-spec.c (dump_ada_declaration) <TYPE_DECL>: Generate a forward
+       declaration for a typedef independently of whether the declaration of
+       the subtype is generated.
+
 2018-05-31  Martin Sebor  <msebor@redhat.com>
 
        PR c/82063
index bc137a6eae37d0627c82ea938ef06781c8b3f4aa..30fdb59d55c933e028399b80f243ed67f877f751 100644 (file)
@@ -2734,19 +2734,25 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
 
          if (TYPE_NAME (typ))
            {
-             /* If types have same representation, and same name (ignoring
-                casing), then ignore the second type.  */
+             /* If the types have the same name (ignoring casing), then ignore
+                the second type, but forward declare the first if need be.  */
              if (type_name (typ) == type_name (TREE_TYPE (t))
                  || !strcasecmp (type_name (typ), type_name (TREE_TYPE (t))))
                {
+                 if (RECORD_OR_UNION_TYPE_P (typ) && !TREE_VISITED (stub))
+                   {
+                     INDENT (spc);
+                     dump_forward_type (buffer, typ, t, 0);
+                   }
+
                  TREE_VISITED (t) = 1;
                  return 0;
                }
 
              INDENT (spc);
 
-             if (RECORD_OR_UNION_TYPE_P (typ))
-               dump_forward_type (buffer, stub, t, spc);
+             if (RECORD_OR_UNION_TYPE_P (typ) && !TREE_VISITED (stub))
+               dump_forward_type (buffer, typ, t, spc);
 
              pp_string (buffer, "subtype ");
              dump_ada_node (buffer, t, type, spc, false, true);