qapi: Assert incomplete object occurs only in dealloc visitor

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20200424084338.26803-7-armbru@redhat.com>
This commit is contained in:
Markus Armbruster 2020-04-24 10:43:29 +02:00
parent 554d6586ae
commit 8e08bf4ea2
4 changed files with 16 additions and 0 deletions

View File

@ -1446,6 +1446,8 @@ Example:
goto out;
}
if (!*obj) {
/* incomplete */
assert(visit_is_dealloc(v));
goto out_obj;
}
visit_type_UserDefOne_members(v, *obj, &err);

View File

@ -479,6 +479,11 @@ void visit_type_enum(Visitor *v, const char *name, int *obj,
*/
bool visit_is_input(Visitor *v);
/*
* Check if visitor is a dealloc visitor.
*/
bool visit_is_dealloc(Visitor *v);
/*** Visiting built-in types ***/
/*

View File

@ -142,6 +142,11 @@ bool visit_is_input(Visitor *v)
return v->type == VISITOR_INPUT;
}
bool visit_is_dealloc(Visitor *v)
{
return v->type == VISITOR_DEALLOC;
}
void visit_type_int(Visitor *v, const char *name, int64_t *obj, Error **errp)
{
assert(obj);

View File

@ -189,6 +189,8 @@ void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj, Error
goto out;
}
if (!*obj) {
/* incomplete */
assert(visit_is_dealloc(v));
goto out_obj;
}
switch ((*obj)->type) {
@ -260,6 +262,8 @@ void visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj, Error
goto out;
}
if (!*obj) {
/* incomplete */
assert(visit_is_dealloc(v));
goto out_obj;
}
visit_type_%(c_name)s_members(v, *obj, &err);