unicorn/qemu
Eduardo Habkost 9d412ac4b3
qapi: Fix error handling code on alternate conflict
The conflict check added by commit c0644771 ("qapi: Reject
alternates that can't work with keyval_parse()") doesn't work
with the following declaration:

{ 'alternate': 'Alt',
'data': { 'one': 'bool',
'two': 'str' } }

It crashes with:

Traceback (most recent call last):
File "./scripts/qapi-types.py", line 295, in <module>
schema = QAPISchema(input_file)
File "/home/ehabkost/rh/proj/virt/qemu/scripts/qapi.py", line 1468, in __init__
self.exprs = check_exprs(parser.exprs)
File "/home/ehabkost/rh/proj/virt/qemu/scripts/qapi.py", line 958, in check_exprs
check_alternate(expr, info)
File "/home/ehabkost/rh/proj/virt/qemu/scripts/qapi.py", line 830, in check_alternate
% (name, key, types_seen[qtype]))
KeyError: 'QTYPE_QSTRING'

This happens because the previously-seen conflicting member
('one') can't be found at types_seen[qtype], but at
types_seen['QTYPE_BOOL'].

Fix the bug by moving the error check to the same loop that adds
new items to types_seen, raising an exception if types_seen[qt]
is already set.

Backports commit fda72ab4510bcc680a3c4fe55997aa29589884f7 from qemu
2018-03-07 16:57:59 -05:00
..
accel tcg: Merge opcode arguments into TCGOp 2018-03-05 04:45:20 -05:00
crypto crypto: Clean up includes 2018-02-19 00:47:40 -05:00
default-configs arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
docs docs: clarify memory region lifecycle 2018-02-12 15:11:21 -05:00
fpu softfloat: define floatx80_round() 2018-03-03 20:57:27 -05:00
hw Include qapi/error.h exactly where needed 2018-03-07 12:26:38 -05:00
include cpu:Remove unused callbacks 2018-03-07 16:55:46 -05:00
qapi qapi: Use QNull for a more regular visit_type_null() 2018-03-07 16:50:16 -05:00
qobject qapi: Separate type QNull from QObject 2018-03-07 16:43:51 -05:00
qom qom: introduce type_register_static_array() 2018-03-05 03:49:50 -05:00
scripts qapi: Fix error handling code on alternate conflict 2018-03-07 16:57:59 -05:00
target Include qapi/error.h exactly where needed 2018-03-07 12:26:38 -05:00
tcg tcg/aarch64: Add vector operations 2018-03-07 08:07:58 -05:00
util sparc: Make sure we mmap at SHMLBA alignment 2018-03-05 14:09:58 -05:00
aarch64.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
aarch64eb.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
accel.c clean-up: removed duplicate #includes 2018-02-28 08:51:56 -05:00
arm.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
armeb.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
atomic_template.h tcg: Record code_gen_buffer address for user-only memory helpers 2018-03-05 13:48:27 -05:00
CODING_STYLE import 2015-08-21 15:04:50 +08:00
configure tcg: Add generic vector expanders 2018-03-06 13:42:52 -05:00
COPYING import 2015-08-21 15:04:50 +08:00
COPYING.LIB import 2015-08-21 15:04:50 +08:00
cpu-exec-common.c tcg: Add EXCP_ATOMIC 2018-02-27 11:57:58 -05:00
cpu-exec.c exec-all: extract tb->tc_* into a separate struct tc_tb 2018-03-05 02:57:22 -05:00
cpus.c Include qapi/error.h exactly where needed 2018-03-07 12:26:38 -05:00
cputlb.c accel/tcg: add size paremeter in tlb_fill() 2018-03-06 10:56:34 -05:00
exec.c cpu: suffix cpu address spaces with cpu index 2018-03-05 14:41:25 -05:00
gen_all_header.sh arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
glib_compat.c qapi: Improve qobject input visitor error reporting 2018-03-02 12:05:53 -05:00
HACKING import 2015-08-21 15:04:50 +08:00
header_gen.py target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
ioport.c hw: remove pio_addr_t 2018-02-24 02:43:16 -05:00
LICENSE import 2015-08-21 15:04:50 +08:00
m68k.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
Makefile qapi: force a UTF-8 locale for running Python 2018-03-06 11:32:48 -05:00
Makefile.objs tcg: Add atomic helpers 2018-02-27 15:57:47 -05:00
Makefile.target tcg: Add generic vector expanders 2018-03-06 13:42:52 -05:00
memory.c memory: remove unused memory_region_set_global_locking() 2018-03-05 14:14:43 -05:00
memory_ldst.inc.c exec: introduce memory_ldst.inc.c 2018-03-01 09:59:34 -05:00
memory_mapping.c include/qemu/osdep.h: Don't include qapi/error.h 2018-02-21 23:08:18 -05:00
mips.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
mips64.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
mips64el.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
mipsel.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
powerpc.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
qapi-schema.json qapi: Update scripts to commit 01b2ffcedd94ad7b42bc870e4c6936c87ad03429 2018-03-03 18:32:12 -05:00
qemu-timer.c timer/cpus: fix some typos and update some comments 2018-02-25 23:21:57 -05:00
rules.mak build-sys: silence make by default or V=0 2018-03-06 08:58:03 -05:00
softmmu_template.h accel/tcg: add size paremeter in tlb_fill() 2018-03-06 10:56:34 -05:00
sparc.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
sparc64.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00
tcg-runtime-gvec.c tcg: Add generic vector helpers with a scalar operand 2018-03-06 16:10:09 -05:00
tcg-runtime.c exec-all: extract tb->tc_* into a separate struct tc_tb 2018-03-05 02:57:22 -05:00
translate-all.c translate-all: Zero out the TCGContext instance 2018-03-05 15:40:51 -05:00
translate-all.h translate-all.c: Compute L1 page table properties at runtime 2018-02-26 11:46:58 -05:00
translate-common.c exec: Clean up includes 2018-02-19 00:49:55 -05:00
unicorn_common.h qom/cpu: Add MemoryRegion property 2018-02-18 21:54:50 -05:00
VERSION import 2015-08-21 15:04:50 +08:00
vl.c Include qapi/error.h exactly where needed 2018-03-07 12:26:38 -05:00
vl.h import 2015-08-21 15:04:50 +08:00
x86_64.h target/arm: implement SM4 instructions 2018-03-07 08:57:53 -05:00