On 26/01/2026 11:52, Fujii Masao wrote:
> On Fri, Jan 23, 2026 at 9:30 PM Heikki Linnakangas <hlinnaka@iki.fi> wrote:
>> On 23/01/2026 14:13, Fujii Masao wrote:
>>> While reviewing the patch [1], I found that WalSndShutdown() calls abort()
>>> with the comment "keep the compiler quiet" just after proc_exit(0).
>>>
>>> static void
>>> WalSndShutdown(void)
>>> {
>>> /*
>>> * Reset whereToSendOutput to prevent ereport from attempting to send any
>>> * more messages to the standby.
>>> */
>>> if (whereToSendOutput == DestRemote)
>>> whereToSendOutput = DestNone;
>>>
>>> proc_exit(0);
>>> abort(); /* keep the compiler quiet */
>>> }
>>>
>>> This may have been necessary in the past, but is it still required?
>>> Other functions, such as CheckpointerMain(), simply call proc_exit(0)
>>> without an abort(), which doesn't seem to cause compiler warnings.
>>> That made me wonder whether the abort() in WalSndShutdown() is
>>> still needed, or which compiler would actually warn if WalSndLoop()
>>> does not end with an abort().
>>
>> Seems useless to me. Looking at the git history, long time ago the
>> proc_exit(0) call was in a function that returned "int", and I can see
>> how the compiler would complain about that if it didn't know that the
>> function doesn't return. But WalSendShutdown() returns void these days,
>> so you should not get a compiler warning, whether or not the compiler
>> understands that proc_exit(0) doesn't return.
>
> Thanks! Also WalSndShutdown() and proc_exit() are now marked pg_noreturn,
> so the compiler can see that the function never returns, seems which should
> also eliminate the warning even without abort().
Yeah. Nowadays pg_noreturn is understood by all supported compilers.
There are no guarantees on what the compiler will do with the
information, but I would expect it to silence that warning on any
half-decent compiler. (But as discussed, this is moot anyway because the
returns 'void')
> I'm thinking to remove the abort() call from WalSndShutdown() in the
> attached patch.
+1
- Heikki