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.
(is_char_array): Fix formatting.
(dump_template_types): Likewise.
{
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)
{
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;
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);
-
- 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);
- }
+ 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);
TREE_VISITED (t) = 1;
return 1;
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;
}