At Wed, 19 Dec 2018 09:55:22 -0500, Tom Lane <tgl@sss.pgh.pa.us> wrote in <10268.1545231322@sss.pgh.pa.us>
> Andres Freund <andres@anarazel.de> writes:
> > On 2018-12-18 23:17:54 -0500, Tom Lane wrote:
> >> Yeah, that would sure make things better. I was considering
> >> something like
> >>
> >> #ifndef USE_ASSERT_CHECKING
> >> default:
> >> elog(ERROR, ...);
> >> #endif
>
> > Yea, that's the best I can come up with too. I think we'd probably want
> > to have the warning available during development mainly, so I'm not sure
> > the "lonely buildfarm animal" approach buys us enough.
>
> Well, if it's controlled by some dedicated symbol ("CHECK_ENUM_SWITCHES"
> or such) then you could certainly run a test compile with that turned
> on, if you felt the need to. But I don't really buy the complaint
> that leaving it to the buildfarm to find such problems wouldn't work.
> They're almost always simple, easily-fixed oversights.
>
> Also, if we wrap all this up in a macro then it'd be possible to do
> other things by adjusting the macro. I'm envisioning
>
> switch ((RelationRelkind) rel->rd_rel->relkind)
> {
> case ...
> ...
>
> CHECK_ENUM_SWITCH(RelationRelkind, rel->rd_rel->relkind);
> }
I might misunderstand something, but my compiler (gcc 7.3.1)
won't be quiet about omitted value even with default:.
> switch ((x) v)
> {
> case A: ...
> case B: ...
> default: ...
> }
>
> t.c:12:3: warning: enumeration value 'C' not handled in switch [-Wswitch-enum]
Isn't it enough that at least one platform correctly warns that?
regards.
--
Kyotaro Horiguchi
NTT Open Source Software Center