Commit 09de3550 by Eric Botcazou Committed by Eric Botcazou

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
parent e02f4b92
2018-02-28 Eric Botcazou <ebotcazou@adacore.com> 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. * c-ada-spec.c (dump_ada_import): Use boolean and fix formatting.
(is_char_array): Fix formatting. (is_char_array): Fix formatting.
(dump_template_types): Likewise. (dump_template_types): Likewise.
......
...@@ -2266,11 +2266,8 @@ dump_ada_node (pretty_printer *buffer, tree node, tree type, int spc, ...@@ -2266,11 +2266,8 @@ dump_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
{ {
tree type_name = TYPE_NAME (TREE_TYPE (node)); tree type_name = TYPE_NAME (TREE_TYPE (node));
/* For now, handle access-to-access and access-to-incomplete /* For now, handle access-to-access as System.Address. */
as opaque System.Address. */ if (TREE_CODE (TREE_TYPE (node)) == POINTER_TYPE)
if (TREE_CODE (TREE_TYPE (node)) == POINTER_TYPE
|| (RECORD_OR_UNION_TYPE_P (TREE_TYPE (node))
&& !COMPLETE_TYPE_P (TREE_TYPE (node))))
{ {
if (package_prefix) if (package_prefix)
{ {
...@@ -2515,11 +2512,6 @@ dump_forward_type (pretty_printer *buffer, tree type, tree t, int spc) ...@@ -2515,11 +2512,6 @@ dump_forward_type (pretty_printer *buffer, tree type, tree t, int spc)
if (DECL_IS_BUILTIN (decl) || TREE_VISITED (decl)) if (DECL_IS_BUILTIN (decl) || TREE_VISITED (decl))
return; 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. */ /* Forward declarations are only needed within a given file. */
if (DECL_SOURCE_FILE (decl) != DECL_SOURCE_FILE (t)) if (DECL_SOURCE_FILE (decl) != DECL_SOURCE_FILE (t))
return; return;
...@@ -2743,23 +2735,15 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc) ...@@ -2743,23 +2735,15 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
INDENT (spc); INDENT (spc);
if (RECORD_OR_UNION_TYPE_P (typ) && !COMPLETE_TYPE_P (typ)) if (RECORD_OR_UNION_TYPE_P (typ))
{ dump_forward_type (buffer, stub, t, spc);
pp_string (buffer, "-- skipped incomplete struct ");
dump_ada_node (buffer, t, type, spc, false, true); pp_string (buffer, "subtype ");
} dump_ada_node (buffer, t, type, spc, false, true);
else pp_string (buffer, " is ");
{ dump_ada_node (buffer, typ, type, spc, false, true);
if (RECORD_OR_UNION_TYPE_P (typ)) pp_string (buffer, "; -- ");
dump_forward_type (buffer, stub, t, spc); 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; TREE_VISITED (t) = 1;
return 1; return 1;
...@@ -2788,8 +2772,10 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc) ...@@ -2788,8 +2772,10 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
case UNION_TYPE: case UNION_TYPE:
if (!COMPLETE_TYPE_P (TREE_TYPE (t))) 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); dump_ada_node (buffer, t, type, spc, false, true);
pp_string (buffer, " is null record; -- incomplete struct");
TREE_VISITED (t) = 1;
return 1; return 1;
} }
......
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> 2018-02-28 Martin Liska <mliska@suse.cz>
PR testsuite/84597 PR testsuite/84597
......
/* { 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 } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment