Re: [PATCH 1/2] Compiler Attributes: add support for __fallthrough (gcc >= 7.1)

From: Willy Tarreau
Date: Mon Oct 22 2018 - 03:07:14 EST


On Mon, Oct 22, 2018 at 02:58:00AM -0400, Theodore Y. Ts'o wrote:
> On Sun, Oct 21, 2018 at 05:42:18PM -0700, Matthew Wilcox wrote:
> > On Sun, Oct 21, 2018 at 07:14:13PM +0200, Miguel Ojeda wrote:
> > > +#if __has_attribute(__fallthrough__)
> > > +# define __fallthrough __attribute__((__fallthrough__))
> > > +#else
> > > +# define __fallthrough
> > > +#endif
> >
> > Why is the #else not:
> >
> > # define __fallthrough /* fallthrough */
> >
> > Would this solve the Coverity problem, or does Coverity look at the raw
> > source code before preprocessing?
>
> Wouldn't the "/* ... */" be eaten by the preprocessor before defining
> the __fallthrough cpp macro? (e.g., try running the attached script)

You're right, even on older versions (4.7 here) :

$ echo -e '#define foobar quux /* foobar */\nfoobar\n' | gcc -E -
# 1 "<stdin>"
# 1 "<command-line>"
# 1 "<stdin>"

quux

Willy