>
> So the issue seems to be:
>
> gcov_info_type = lang_hooks.types.make_type (RECORD_TYPE);
> gcov_fn_info_type = lang_hooks.types.make_type (RECORD_TYPE);
> gcov_fn_info_ptr_type = build_pointer_type
> (build_qualified_type (gcov_fn_info_type, TYPE_QUAL_CONST));
> build_fn_info_type (gcov_fn_info_type, n_counters, gcov_info_type);
> build_info_type (gcov_info_type, gcov_fn_info_ptr_type);
>
> that __gcov_info has a member of type const __gcov_info * and that
> rather than using the equivalent of
>
> struct __gcov_info;
> typedef const __gcov_info *gcov_fn_info_ptr_type;
> struct __gcov_info {
> ...
> gcov_fn_info_ptr_type x;
> };
>
> we build the variant of the yet incomplete struct and complete
> it later.
>
> Sth like
>
> Index: coverage.c
> ===================================================================
> --- coverage.c (revision 210965)
> +++ coverage.c (working copy)
> @@ -1078,9 +1078,10 @@
> /* Build the info and fn_info types. These are mutually recursive. */
> gcov_info_type = lang_hooks.types.make_type (RECORD_TYPE);
> gcov_fn_info_type = lang_hooks.types.make_type (RECORD_TYPE);
> + build_fn_info_type (gcov_fn_info_type, n_counters, gcov_info_type);
> + gcov_info_type = lang_hooks.types.make_type (RECORD_TYPE);
> gcov_fn_info_ptr_type = build_pointer_type
> (build_qualified_type (gcov_fn_info_type, TYPE_QUAL_CONST));
> - build_fn_info_type (gcov_fn_info_type, n_counters, gcov_info_type);
> build_info_type (gcov_info_type, gcov_fn_info_ptr_type);
>
> /* Build the gcov info var, this is referred to in its own
Hmm, right. I somehow misread it that gcov_info_type variant is built, but I
hope it is not - will double check. If not, then this should indeed work.
Still do not know how to use current finish_builtin_struct interface for case
where we want to have a structure that contains qualified pointer to itself.
Thanks,
Honza