The type_seen member can be of a different type than the 'qtype' being checked, since a string create several conflicts. Lookup the real conflicting type in the conflict set, that one must be present in type_seen.
This fixes the following error, reproducible with the modified test: Traceback (most recent call last): File "/home/elmarco/src/qq/tests/qapi-schema/test-qapi.py", line 56, in <module> schema = QAPISchema(sys.argv[1]) File "/home/elmarco/src/qq/scripts/qapi.py", line 1470, in __init__ self.exprs = check_exprs(parser.exprs) File "/home/elmarco/src/qq/scripts/qapi.py", line 959, in check_exprs check_alternate(expr, info) File "/home/elmarco/src/qq/scripts/qapi.py", line 831, in check_alternate % (name, key, types_seen[qtype])) KeyError: 'QTYPE_QSTRING' Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- scripts/qapi.py | 6 ++++-- tests/qapi-schema/alternate-conflict-string.json | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/scripts/qapi.py b/scripts/qapi.py index 8aa2775f12..a3ac799535 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -825,10 +825,12 @@ def check_alternate(expr, info): else: conflicting.add('QTYPE_QNUM') conflicting.add('QTYPE_QBOOL') - if conflicting & set(types_seen): + conflict = conflicting & set(types_seen) + if conflict: + conflict_qtype = list(conflict)[0] raise QAPISemError(info, "Alternate '%s' member '%s' can't " "be distinguished from member '%s'" - % (name, key, types_seen[qtype])) + % (name, key, types_seen[conflict_qtype])) for qt in conflicting: types_seen[qt] = key diff --git a/tests/qapi-schema/alternate-conflict-string.json b/tests/qapi-schema/alternate-conflict-string.json index 85adbd4adc..bb2702978e 100644 --- a/tests/qapi-schema/alternate-conflict-string.json +++ b/tests/qapi-schema/alternate-conflict-string.json @@ -1,4 +1,4 @@ # alternate branches of 'str' type conflict with all scalar types { 'alternate': 'Alt', - 'data': { 'one': 'str', - 'two': 'int' } } + 'data': { 'one': 'int', + 'two': 'str' } } -- 2.14.1.146.gd35faa819