On 09/29/2015 04:21 PM, Eric Blake wrote: > Expose some weaknesses in the generator: we don't always forbid > the generation of structs that contain multiple members that map > to the same C or QMP name. This has already been marked FIXME in > qapi.py in commit d90675f, but having more tests will make sure > future patches produce desired behavior; and updating existing > patches to better document things doesn't hurt, either. Some of > these collisions are already caught in the old-style parser > checks, but ultimately we want all collisions to be caught in the > new-style QAPISchema*.check() methods. >
> diff --git a/tests/qapi-schema/union-clash-branches.err
> b/tests/qapi-schema/union-clash-branches.err
> new file mode 100644
> index 0000000..005c48d
> --- /dev/null
> +++ b/tests/qapi-schema/union-clash-branches.err
> @@ -0,0 +1 @@
> +tests/qapi-schema/union-clash-branches.json:4: Union 'TestUnion' member
> 'a_b' clashes with 'a-b'
> diff --git a/tests/qapi-schema/union-clash-branches.exit
> b/tests/qapi-schema/union-clash-branches.exit
> new file mode 100644
> index 0000000..d00491f
> --- /dev/null
> +++ b/tests/qapi-schema/union-clash-branches.exit
> @@ -0,0 +1 @@
> +1
> diff --git a/tests/qapi-schema/union-clash-branches.json
> b/tests/qapi-schema/union-clash-branches.json
> new file mode 100644
> index 0000000..31d135f
> --- /dev/null
> +++ b/tests/qapi-schema/union-clash-branches.json
> @@ -0,0 +1,5 @@
> +# Union branch name collision
> +# Reject a union that would result in a collision in generated C names (this
> +# would try to generate two enum values 'TEST_UNION_KIND_A_B').
> +{ 'union': 'TestUnion',
> + 'data': { 'a-b': 'int', 'a_b': 'str' } }
Hmm. This test is very similar to the existing union-bad-branch (I guess
it's poor name is why I didn't notice it before). But that test only
covered 'one' vs. 'ONE' (no clash in the C struct, just in the generated
MyUnionKind enum type); while this test also clashes in the C struct.
Don't know if it is worth a v8 to clean up the duplication, or if we
just save it for a followup patch (namely, where I try to move errors
into the QAPISchema.check() methods); I found the issue while playing
with v5 15/46.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
