On 01/27/2016 06:54 AM, Markus Armbruster wrote: > The generated code can call visit_end_union() without having called > visit_start_union(). Example: > > if (!*obj) { > goto out_obj; > } > visit_type_BlockdevOptions_fields(v, 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)->driver) { > [...] > } > 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.
I plan on deleting visit_end_union() anyways (and visit_start_union); see 32/37, plus the FIXME comments added in 21/37. Maybe it's easier to just delete this incorrect and unused callback earlier in the series, using your commit message as additional rationale why it is worthless, and leaving only visit_start_union() cleanups for 32/37. > > Messed up since we have visit_end_union (commit cee2ded). Indeed. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature