diff mbox

[2/3] qapi-visit: Clean up code generated around visit_end_union()

Message ID 1453902888-20457-3-git-send-email-armbru@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Markus Armbruster Jan. 27, 2016, 1:54 p.m. UTC
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.

Messed up since we have visit_end_union (commit cee2ded).

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 scripts/qapi-visit.py | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

Comments

Eric Blake Jan. 27, 2016, 2:02 p.m. UTC | #1
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.
Markus Armbruster Jan. 27, 2016, 2:46 p.m. UTC | #2
Eric Blake <eblake@redhat.com> writes:

> 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);

Tabs crept into my commit message, oops.

>> 
>> 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.

I could've tried to move PATCH 32 before the unification, but that
would've been work, so I went with this straightforward fix instead.
Sure, it fixes something that'll go away soon, but I think the churn is
quite tolerable: 1 file changed, 2 insertions(+), 4 deletions(-).

>> Messed up since we have visit_end_union (commit cee2ded).
>
> Indeed.
diff mbox

Patch

diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py
index 5c0d4d2..8dcc6dc 100644
--- a/scripts/qapi-visit.py
+++ b/scripts/qapi-visit.py
@@ -299,12 +299,10 @@  void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj, Error
     default:
         abort();
     }
-out_obj:
     error_propagate(errp, err);
     err = NULL;
-    if (*obj) {
-        visit_end_union(v, !!(*obj)->u.data, &err);
-    }
+    visit_end_union(v, !!(*obj)->u.data, &err);
+out_obj:
     error_propagate(errp, err);
     err = NULL;
     visit_end_struct(v, &err);