On Fri, Aug 25, 2017 at 2:57 PM Eduardo Habkost <ehabk...@redhat.com> wrote:
> On Fri, Aug 25, 2017 at 08:02:26AM +0200, Markus Armbruster wrote: > > Conflicts with Eduardo's "[PATCH v2] qapi: Fix error handling code on > > alternate conflict". > > Message-Id: <20170717180926.14924-1-ehabk...@redhat.com> > > > > Marc-André, could you have a look? You can rebase your fix on top of > > Eduardo's, or merge the two into one commit. > > Both patches seem to be fixing the same bug. > Yes, it is solved differently. But take Eduardo's patch, it has more extensive tests . > > > > > Marc-André Lureau <marcandre.lur...@redhat.com> writes: > > > > > 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' } } > > -- > Eduardo > > -- Marc-André Lureau