Commit 972a1101 authored by Eric Blake's avatar Eric Blake Committed by Markus Armbruster
Browse files

qapi: Fix command with named empty argument type



The generator special-cased

 { 'command':'foo', 'data': {} }

to avoid emitting a visitor variable, but failed to see that

 { 'struct':'NamedEmptyType, 'data': {} }
 { 'command':'foo', 'data':'NamedEmptyType' }

needs the same treatment.  There, the generator happily generates a
visitor to get no arguments, and a visitor to destroy no arguments;
and the compiler isn't happy with that, as demonstrated by the updated
qapi-schema-test.json:

  tests/test-qmp-marshal.c: In function ‘qmp_marshal_user_def_cmd0’:
  tests/test-qmp-marshal.c:264:14: error: variable ‘v’ set but not used [-Werror=unused-but-set-variable]
       Visitor *v;
                ^

No change to generated code except for the testsuite addition.

Signed-off-by: default avatarEric Blake <eblake@redhat.com>
Message-Id: <1458254921-17042-3-git-send-email-eblake@redhat.com>
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
parent 29f6bd15
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ def gen_marshal_vars(arg_type, ret_type):
''',
                     c_type=ret_type.c_type())

    if arg_type:
    if arg_type and arg_type.members:
        ret += mcgen('''
    QmpInputVisitor *qiv = qmp_input_visitor_new_strict(QOBJECT(args));
    QapiDeallocVisitor *qdv;
@@ -98,7 +98,7 @@ def gen_marshal_vars(arg_type, ret_type):
def gen_marshal_input_visit(arg_type, dealloc=False):
    ret = ''

    if not arg_type:
    if not arg_type or not arg_type.members:
        return ret

    if dealloc:
+2 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@
{ 'struct': 'Empty1', 'data': { } }
{ 'struct': 'Empty2', 'base': 'Empty1', 'data': { } }

{ 'command': 'user_def_cmd0', 'data': 'Empty2', 'returns': 'Empty2' }

# for testing override of default naming heuristic
{ 'enum': 'QEnumTwo',
  'prefix': 'QENUM_TWO',
+2 −0
Original line number Diff line number Diff line
@@ -203,6 +203,8 @@ command guest-sync :obj-guest-sync-arg -> any
   gen=True success_response=True
command user_def_cmd None -> None
   gen=True success_response=True
command user_def_cmd0 Empty2 -> Empty2
   gen=True success_response=True
command user_def_cmd1 :obj-user_def_cmd1-arg -> None
   gen=True success_response=True
command user_def_cmd2 :obj-user_def_cmd2-arg -> UserDefTwo
+5 −0
Original line number Diff line number Diff line
@@ -13,6 +13,11 @@ void qmp_user_def_cmd(Error **errp)
{
}

Empty2 *qmp_user_def_cmd0(Error **errp)
{
    return g_new0(Empty2, 1);
}

void qmp_user_def_cmd1(UserDefOne * ud1, Error **errp)
{
}