c-ada-spec.c (dump_ada_node): Do not use generic address for incomplete structures.

* c-ada-spec.c (dump_ada_node) <POINTER_TYPE>: Do not use generic
	address for incomplete structures.
	(dump_forward_type): Do not bail out for incomplete structures.
	(dump_ada_declaration): Do not special-case incomplete structures
	for subtypes.  Dump them as null records for types.

From-SVN: r258066
This commit is contained in:
Eric Botcazou 2018-02-28 13:59:44 +00:00 committed by Eric Botcazou
parent e02f4b9298
commit 09de35509f
4 changed files with 36 additions and 27 deletions

View file

@ -1,3 +1,11 @@
2018-02-28 Eric Botcazou <ebotcazou@adacore.com>
* c-ada-spec.c (dump_ada_node) <POINTER_TYPE>: Do not use generic
address for incomplete structures.
(dump_forward_type): Do not bail out for incomplete structures.
(dump_ada_declaration): Do not special-case incomplete structures
for subtypes. Dump them as null records for types.
2018-02-28 Eric Botcazou <ebotcazou@adacore.com>
* c-ada-spec.c (dump_ada_import): Use boolean and fix formatting.

View file

@ -2266,11 +2266,8 @@ dump_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
{
tree type_name = TYPE_NAME (TREE_TYPE (node));
/* For now, handle access-to-access and access-to-incomplete
as opaque System.Address. */
if (TREE_CODE (TREE_TYPE (node)) == POINTER_TYPE
|| (RECORD_OR_UNION_TYPE_P (TREE_TYPE (node))
&& !COMPLETE_TYPE_P (TREE_TYPE (node))))
/* For now, handle access-to-access as System.Address. */
if (TREE_CODE (TREE_TYPE (node)) == POINTER_TYPE)
{
if (package_prefix)
{
@ -2515,11 +2512,6 @@ dump_forward_type (pretty_printer *buffer, tree type, tree t, int spc)
if (DECL_IS_BUILTIN (decl) || TREE_VISITED (decl))
return;
/* We'll need to generate a completion at some point. */
if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (decl))
&& !COMPLETE_TYPE_P (TREE_TYPE (decl)))
return;
/* Forward declarations are only needed within a given file. */
if (DECL_SOURCE_FILE (decl) != DECL_SOURCE_FILE (t))
return;
@ -2743,23 +2735,15 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
INDENT (spc);
if (RECORD_OR_UNION_TYPE_P (typ) && !COMPLETE_TYPE_P (typ))
{
pp_string (buffer, "-- skipped incomplete struct ");
dump_ada_node (buffer, t, type, spc, false, true);
}
else
{
if (RECORD_OR_UNION_TYPE_P (typ))
dump_forward_type (buffer, stub, t, spc);
if (RECORD_OR_UNION_TYPE_P (typ))
dump_forward_type (buffer, stub, t, spc);
pp_string (buffer, "subtype ");
dump_ada_node (buffer, t, type, spc, false, true);
pp_string (buffer, " is ");
dump_ada_node (buffer, typ, type, spc, false, true);
pp_string (buffer, "; -- ");
dump_sloc (buffer, t);
}
pp_string (buffer, "subtype ");
dump_ada_node (buffer, t, type, spc, false, true);
pp_string (buffer, " is ");
dump_ada_node (buffer, typ, type, spc, false, true);
pp_string (buffer, "; -- ");
dump_sloc (buffer, t);
TREE_VISITED (t) = 1;
return 1;
@ -2788,8 +2772,10 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
case UNION_TYPE:
if (!COMPLETE_TYPE_P (TREE_TYPE (t)))
{
pp_string (buffer, "-- skipped incomplete struct ");
pp_string (buffer, "type ");
dump_ada_node (buffer, t, type, spc, false, true);
pp_string (buffer, " is null record; -- incomplete struct");
TREE_VISITED (t) = 1;
return 1;
}

View file

@ -1,3 +1,7 @@
2018-02-28 Eric Botcazou <ebotcazou@adacore.com>
* c-c++-common/dump-ada-spec-11.c: New test.
2018-02-28 Martin Liska <mliska@suse.cz>
PR testsuite/84597

View file

@ -0,0 +1,11 @@
/* { dg-do compile } */
/* { dg-options "-fdump-ada-spec" } */
typedef struct T My_T;
int foo1 (My_T *);
int foo2 (My_T *);
/* { dg-final { scan-ada-spec-not "System.Address" } } */
/* { dg-final { cleanup-ada-spec } } */