From 710467e0340f0fbfbf7e2d422584fdca89d5bc23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Thu, 4 Oct 2018 04:28:37 -0400 Subject: [PATCH] qom/object: add some interface asserts An interface can't have any instance size or callback, or itself implement other interfaces (this is unsupported). Backports commit 422ca1432f7b44f2a9f3ad94a65d36927da021fa from qemu --- qemu/qom/object.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/qemu/qom/object.c b/qemu/qom/object.c index 7e8334da..591747fd 100644 --- a/qemu/qom/object.c +++ b/qemu/qom/object.c @@ -273,7 +273,18 @@ static void type_initialize(struct uc_struct *uc, TypeImpl *ti) ti->class_size = type_class_get_size(uc, ti); ti->instance_size = type_object_get_size(uc, ti); + if (ti->instance_size == 0) { + ti->abstract = true; + } + if (type_is_ancestor(uc, ti, uc->type_interface)) { + assert(ti->instance_size == 0); + assert(ti->abstract); + assert(!ti->instance_init); + assert(!ti->instance_post_init); + assert(!ti->instance_finalize); + assert(!ti->num_interfaces); + } ti->class = g_malloc0(ti->class_size); parent = type_get_parent(uc, ti);