Re: [PATCH] afs: fix no return statement in function returning non-void

From: Randy Dunlap
Date: Tue Jun 15 2021 - 21:38:46 EST


On 6/15/21 5:32 PM, Linus Torvalds wrote:
> On Tue, Jun 15, 2021 at 4:58 PM Randy Dunlap <rdunlap@xxxxxxxxxxxxx> wrote:
>>
>> Some implementations of BUG() are macros, not functions,
>
> Not "some", I think. Most.
>
>> so "unreachable" is not applicable AFAIK.
>
> Sure it is. One common pattern is the x86 one:
>
> #define BUG() \
> do { \
> instrumentation_begin(); \
> _BUG_FLAGS(ASM_UD2, 0); \
> unreachable(); \
> } while (0)

duh.

> and that "unreachable()" is exactly what I'm talking about.
>
> So I repeat: what completely broken compiler / config / architecture
> is it that needs that "return 0" after a BUG() statement?

I have seen it on ia64 -- most likely GCC 9.3.0, but I'll have to
double check that.

> Because that environment is broken, and the warning is bogus and wrong.
>
> It might not be the compiler. It might be some architecture that does
> this wrong. It might be some very particular configuration that does
> something bad and makes the "unreachable()" not work (or not exist).
>
> But *that* is the bug that should be fixed. Not adding a pointless and
> incorrect line that makes no sense, just to hide the real bug.