Eric Blake <ebl...@redhat.com> writes:

> The generated code can call visit_end_union() without having called
> visit_start_union().  Example:
>
>         if (!*obj) {
>             goto out_obj;
>         }
>         visit_type_CpuInfoBase_fields(v, (CpuInfoBase **)obj, &err);
>         if (err) {
>             goto out_obj; // if we go from here...
>         }
>         if (!visit_start_union(v, !!(*obj)->u.data, &err) || err) {
>             goto out_obj;
>         }
>         switch ((*obj)->arch) {
>     [...]
>         }
>     out_obj:
>         // ... then *obj is true, and ...
>         error_propagate(errp, err);
>         err = NULL;
>         if (*obj) {
>             // we end up here
>             visit_end_union(v, !!(*obj)->u.data, &err);
>         }
>         error_propagate(errp, err);
>
> Harmless only because no visitor implements end_union().  Clean it up
> anyway, by deleting the function as useless.

This creates an asymmetry between this and the other start_*()s. but
it's only temporary: start_union() will go away in "qapi: Rework
deallocation of partial struct" (not in this series).  Okay.

> Messed up since we have visit_end_union (commit cee2ded).
>
> Signed-off-by: Markus Armbruster <arm...@redhat.com>
> Message-Id: <1453902888-20457-3-git-send-email-arm...@redhat.com>
> [expand scope of patch to delete rather than repair]
> Signed-off-by: Eric Blake <ebl...@redhat.com>
>
> ---
> v10: new patch; take Markus' commit message as a starting point (hence
> his S-o-b), but rewrite the patch and claim ownership

Patch looks good.

Reply via email to