Eric Blake
bac5429ccb
qapi: Detect base class loops
...
It should be fairly obvious that qapi base classes need to
form an acyclic graph, since QMP cannot specify the same
key more than once, while base classes are included as flat
members alongside other members added by the child. But the
old check_member_clash() parser function was not prepared to
check for this, and entered an infinite recursion (at least
until Python gives up, complaining about nesting too deep).
Now that check_member_clash() has been recently removed,
attempts at self-inheritance trigger an assertion failure
introduced by commit ac88219a. The obvious fix is to turn
the assertion into a conditional.
This patch includes both the tests (base-cycle-direct and
base-cycle-indirect) and the fix, since the .err file output
for the unfixed case is not useful (particularly when it was
warning about unbounded recursion, as that limit may be
platform-specific).
We don't need to worry about cycles in flat unions (neither
the base type nor the type of a variant can be a union) nor
in alternates (alternate branches cannot themselves be an
alternate). But if we later allow a union type as a variant,
we will still be okay, as QAPISchemaObjectTypeVariants.check()
triggers the same QAPISchemaObjectType.check() that will
detect any loops.
Likewise, we need not worry about the case of diamond
inheritance where the same class is used for a flat union base
class and one of its variants; either both uses will introduce
a collision in trying to insert the same member name twice, or
the shared type is empty and changes nothing.
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <1449033659-25497-16-git-send-email-eblake@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2015-12-17 08:21:29 +01:00
..
2014-05-08 14:19:58 -04:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-12-17 08:21:29 +01:00
2015-05-05 18:39:00 +02:00
2015-10-12 18:44:54 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-12-17 08:21:28 +01:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-10-12 18:44:54 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-10-12 18:44:54 +02:00
2015-05-05 18:39:00 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-21 09:56:49 +02:00
2015-09-21 09:56:49 +02:00
2015-09-21 09:56:49 +02:00
2015-09-21 09:56:49 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-12-17 08:21:27 +01:00
2015-12-17 08:21:27 +01:00
2015-12-17 08:21:27 +01:00
2015-12-17 08:21:27 +01:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-09-04 15:47:15 +02:00
2015-05-05 18:39:01 +02:00
2013-07-29 10:37:11 -05:00
2013-07-29 10:37:11 -05:00
2015-12-17 08:21:28 +01:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-10-12 18:44:54 +02:00
2014-03-11 09:07:41 -04:00
2015-10-12 18:44:54 +02:00
2014-03-11 09:07:41 -04:00
2015-12-17 08:21:28 +01:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-09-15 10:59:28 +01:00
2015-09-15 10:59:28 +01:00
2015-09-15 10:59:28 +01:00
2015-09-15 10:59:28 +01:00
2015-12-17 08:21:29 +01:00
2015-05-05 18:39:00 +02:00
2015-12-17 08:21:29 +01:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-12-17 08:21:28 +01:00
2015-05-05 18:39:02 +02:00
2014-06-23 11:01:25 -04:00
2014-06-23 11:01:25 -04:00
2014-06-23 11:01:25 -04:00
2015-06-18 14:19:47 +02:00
2015-06-18 14:19:47 +02:00
2015-06-18 14:19:47 +02:00
2015-06-18 14:19:47 +02:00
2015-10-12 18:46:49 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-10-12 18:46:49 +02:00
2015-09-21 09:56:49 +02:00
2015-09-21 09:56:49 +02:00
2015-09-21 09:56:49 +02:00
2015-10-12 18:46:49 +02:00
2015-05-05 18:39:00 +02:00
2015-10-12 18:44:54 +02:00
2015-05-05 18:39:00 +02:00
2015-12-17 08:21:29 +01:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-12-17 08:21:28 +01:00
2015-10-12 18:46:49 +02:00
2015-05-05 18:39:00 +02:00
2015-10-12 18:46:49 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2014-05-08 14:19:58 -04:00
2014-03-11 09:07:41 -04:00
2015-05-05 18:39:01 +02:00
2014-03-11 09:07:41 -04:00
2015-05-05 18:39:01 +02:00
2014-03-11 09:07:41 -04:00
2015-05-05 18:39:01 +02:00
2014-03-11 09:07:41 -04:00
2015-10-12 18:46:49 +02:00
2014-03-11 09:07:41 -04:00
2015-05-05 18:39:01 +02:00
2014-03-11 09:07:41 -04:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2014-05-08 14:19:58 -04:00
2014-03-11 09:07:42 -04:00
2015-05-05 18:39:01 +02:00
2014-03-11 09:07:42 -04:00
2014-05-08 14:19:58 -04:00
2013-07-29 10:37:11 -05:00
2013-07-29 10:37:11 -05:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-12-17 08:21:28 +01:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2015-06-18 14:12:34 +02:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2015-06-18 14:12:34 +02:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2015-10-12 18:44:54 +02:00
2014-05-08 14:19:58 -04:00
2015-10-12 18:44:54 +02:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2015-12-17 08:21:28 +01:00
2014-05-16 10:35:59 -04:00
2014-05-16 10:35:59 -04:00
2014-05-16 10:35:59 -04:00
2014-05-16 10:35:59 -04:00
2015-12-17 08:21:28 +01:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2015-12-17 08:21:28 +01:00
2015-05-05 18:39:01 +02:00
2015-12-17 08:21:28 +01:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2014-05-08 14:19:58 -04:00
2013-07-29 10:37:11 -05:00
2013-07-29 10:37:11 -05:00
2014-05-08 14:19:58 -04:00
2013-07-29 10:37:11 -05:00
2013-07-29 10:37:11 -05:00
2014-05-08 14:19:58 -04:00
2013-07-29 10:37:11 -05:00
2013-07-29 10:37:11 -05:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-09-04 15:47:15 +02:00
2015-05-05 18:39:02 +02:00
2014-05-08 14:19:58 -04:00
2015-12-17 08:21:27 +01:00
2015-12-17 08:21:28 +01:00
2014-05-08 14:19:58 -04:00
2013-07-29 10:37:10 -05:00
2013-07-29 10:37:10 -05:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-12-17 08:21:27 +01:00
2015-12-17 08:21:27 +01:00
2015-12-17 08:21:27 +01:00
2015-12-17 08:21:27 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:28 +01:00
2015-11-02 08:30:28 +01:00
2015-11-02 08:30:28 +01:00
2015-11-02 08:30:28 +01:00
2015-12-17 08:21:27 +01:00
2015-12-17 08:21:27 +01:00
2015-12-17 08:21:27 +01:00
2015-12-17 08:21:27 +01:00
2015-11-02 08:30:25 +01:00
2015-11-02 08:30:25 +01:00
2015-11-02 08:30:25 +01:00
2015-11-02 08:30:25 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-11-02 08:30:26 +01:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-09-04 15:47:15 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-09-04 15:47:16 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-12-17 08:21:29 +01:00
2015-05-05 18:39:02 +02:00
2015-10-12 18:44:54 +02:00
2015-05-05 18:39:02 +02:00
2015-12-17 08:21:29 +01:00
2015-05-05 18:39:02 +02:00
2015-10-12 18:44:54 +02:00
2015-05-05 18:39:02 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-04 15:47:16 +02:00
2015-09-21 09:32:50 +02:00
2014-05-08 14:19:58 -04:00
2013-07-29 10:37:11 -05:00
2013-07-29 10:37:11 -05:00
2014-05-08 14:19:58 -04:00
2013-07-29 10:37:11 -05:00
2013-07-29 10:37:11 -05:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2014-05-08 14:19:58 -04:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-09-04 15:47:16 +02:00
2015-05-05 18:39:00 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:00 +02:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-12-17 08:21:29 +01:00
2015-10-12 18:44:54 +02:00
2015-12-17 08:21:29 +01:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-12-17 08:21:28 +01:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-10-12 18:44:54 +02:00
2015-12-17 08:21:28 +01:00
2015-10-12 18:46:49 +02:00
2014-03-11 09:07:41 -04:00
2015-05-05 18:39:01 +02:00
2014-03-11 09:07:41 -04:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:02 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00
2015-05-05 18:39:01 +02:00