Eric Blake <ebl...@redhat.com> writes: > On 06/14/2016 07:46 AM, Eric Blake wrote: >> On 06/14/2016 07:24 AM, Markus Armbruster wrote: >>> Eric Blake <ebl...@redhat.com> 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 <ebl...@redhat.com> >>> >>> 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.