From ec3dd94a63053fbe43cddd5e9b8b64b368cdd2d5 Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Fri, 1 Jun 2018 08:36:20 +0000 Subject: [PATCH] * c-ada-spec.c (dump_ada_declaration) : Generate a forward declaration for a typedef independently of whether the declaration of the subtype is generated. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@261058 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/c-family/ChangeLog | 6 ++++++ gcc/c-family/c-ada-spec.c | 14 ++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 70245074d9c..319e546534a 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2018-06-01 Eric Botcazou + + * c-ada-spec.c (dump_ada_declaration) : Generate a forward + declaration for a typedef independently of whether the declaration of + the subtype is generated. + 2018-05-31 Martin Sebor PR c/82063 diff --git a/gcc/c-family/c-ada-spec.c b/gcc/c-family/c-ada-spec.c index bc137a6eae3..30fdb59d55c 100644 --- a/gcc/c-family/c-ada-spec.c +++ b/gcc/c-family/c-ada-spec.c @@ -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); -- 2.11.4.GIT