[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 12/19] qapi: Fix command with named empty argumen
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v2 12/19] qapi: Fix command with named empty argument type |
Date: |
Thu, 25 Feb 2016 16:38:41 -0700 |
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: Eric Blake <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
---
v2: no change
v1: enhance commit message
Previously posted as part of qapi cleanup subset E:
v9: no change
v8: no change
v7: no change
v6: new patch
---
scripts/qapi-commands.py | 6 +++---
tests/test-qmp-commands.c | 5 +++++
tests/qapi-schema/qapi-schema-test.json | 2 ++
tests/qapi-schema/qapi-schema-test.out | 2 ++
4 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py
index f44e01f..7c9cfbf 100644
--- a/scripts/qapi-commands.py
+++ b/scripts/qapi-commands.py
@@ -65,7 +65,7 @@ def gen_marshal_vars(arg_type, ret_type):
''',
c_type=ret_type.c_type())
- if arg_type:
+ if arg_type and not arg_type.is_empty():
ret += mcgen('''
QmpInputVisitor *qiv = qmp_input_visitor_new_strict(QOBJECT(args));
QapiDeallocVisitor *qdv;
@@ -97,7 +97,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 arg_type.is_empty():
return ret
if dealloc:
@@ -177,7 +177,7 @@ def gen_marshal(name, arg_type, ret_type):
# 'goto out' produced by gen_marshal_input_visit->gen_visit_members()
# for each arg_type member, and by gen_call() for ret_type
- if (arg_type and arg_type.members) or ret_type:
+ if (arg_type and not arg_type.is_empty()) or ret_type:
ret += mcgen('''
out:
diff --git a/tests/test-qmp-commands.c b/tests/test-qmp-commands.c
index d6171f2..650ba46 100644
--- a/tests/test-qmp-commands.c
+++ b/tests/test-qmp-commands.c
@@ -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)
{
}
diff --git a/tests/qapi-schema/qapi-schema-test.json
b/tests/qapi-schema/qapi-schema-test.json
index b5d0c53..33e8517 100644
--- a/tests/qapi-schema/qapi-schema-test.json
+++ b/tests/qapi-schema/qapi-schema-test.json
@@ -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',
diff --git a/tests/qapi-schema/qapi-schema-test.out
b/tests/qapi-schema/qapi-schema-test.out
index 225e2db..6b97fa5 100644
--- a/tests/qapi-schema/qapi-schema-test.out
+++ b/tests/qapi-schema/qapi-schema-test.out
@@ -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
--
2.5.0
- [Qemu-devel] [PATCH v2 04/19] chardev: Shorten references into ChardevBackend, (continued)
- [Qemu-devel] [PATCH v2 04/19] chardev: Shorten references into ChardevBackend, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 02/19] qapi-visit: Expose visit_type_FOO_members(), Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 01/19] qapi: Rename 'fields' to 'members' in internal interface, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 03/19] qapi: Update docs to match recent generator changes, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 06/19] ui: Shorten references into InputEvent, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 10/19] qapi-visit: Factor out gen_visit_members_call(), Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 07/19] qapi: Avoid use of 'data' member of qapi unions, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 08/19] chardev: Drop useless ChardevDummy type, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 09/19] qapi: Drop useless 'data' member of unions, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 05/19] util: Shorten references into SocketAddress, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 12/19] qapi: Fix command with named empty argument type,
Eric Blake <=
- [Qemu-devel] [PATCH v2 13/19] qapi-visit: Simplify visit of empty branch in union, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 11/19] qapi: Add type.is_empty() helper, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 15/19] qapi-visit: Move error check into gen_visit_members_call(), Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 16/19] qapi: Allow anonymous base for flat union, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 19/19] qapi: Make c_type() more OO-like, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 17/19] qapi: Use anonymous base in SchemaInfo, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 18/19] qapi: Use anonymous base in CpuInfo, Eric Blake, 2016/02/25
- [Qemu-devel] [PATCH v2 14/19] qapi: Don't special-case simple union wrappers, Eric Blake, 2016/02/25