From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47100) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bHntb-0002B1-Hr for qemu-devel@nongnu.org; Tue, 28 Jun 2016 03:57:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bHntX-0004kO-FS for qemu-devel@nongnu.org; Tue, 28 Jun 2016 03:57:22 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44268) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bHntX-0004kG-A0 for qemu-devel@nongnu.org; Tue, 28 Jun 2016 03:57:19 -0400 From: Markus Armbruster References: <1463784024-17242-1-git-send-email-eblake@redhat.com> <1463784024-17242-4-git-send-email-eblake@redhat.com> <87porjdht3.fsf@dusky.pond.sub.org> <57600A99.7030209@redhat.com> <5771D86E.7050101@redhat.com> Date: Tue, 28 Jun 2016 09:57:15 +0200 In-Reply-To: <5771D86E.7050101@redhat.com> (Eric Blake's message of "Mon, 27 Jun 2016 19:52:46 -0600") Message-ID: <87y45peof8.fsf@dusky.pond.sub.org> MIME-Version: 1.0 Content-Type: text/plain Subject: Re: [Qemu-devel] [PATCH v7 03/15] qapi: Require all branches of flat union enum to be covered List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake Cc: qemu-devel@nongnu.org, Michael Roth Eric Blake writes: > On 06/14/2016 07:46 AM, Eric Blake wrote: >> On 06/14/2016 07:24 AM, Markus Armbruster wrote: >>> Eric Blake writes: >>> >>>> We were previously enforcing that all flat union branches were >>>> found in the corresponding enum, but not that all enum values >>>> were covered by branches. The resulting generated code would >>>> abort() if the user passes the uncovered enum value. >>>> >>>> Signed-off-by: Eric Blake >>> >>> I'd let the cases not mentioned default to the empty type (ample >>> precedence in other languages), but I can live with making the user ask >>> for the empty type explicitly. But we should then make that less >>> cumbersome than now: you have to define an empty struct type, and use >>> that. Examples of such hoop-jumping: CpuInfoOther, Abort, >>> NetdevNoneOptions. >> >> Later in the series, I do just that, so that we can write 'other':{} >> instead of 'other':'CpuInfoOther'. >> >> What I did not do (but maybe should) is make that short syntax possible >> on simple unions (so that we could do 'abort':{} rather than >> 'abort':'Abort') - and merely distinguish that simple unions cannot >> stick anything within the {}, thus leaving non-empty anonymous branches >> only for discriminated unions. Can do that as a followup or if this >> series needs a respin. > > In fact, simple unions can't omit branches (the enum is generated from > the branch names that are explicitly mentioned); so for symmetry, an > explicit empty branch in a flat union is nicer than an omitted branch. Fair enough.