Re: enable fallthrough warnings on clang
Peter Eisentraut <peter@eisentraut.org>
From: Peter Eisentraut <peter@eisentraut.org>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Jelte Fennema-Nio <postgres@jeltef.nl>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2026-04-07T14:31:49Z
Lists: pgsql-hackers
On 06.04.26 23:31, Tom Lane wrote:
> Peter Eisentraut <peter@eisentraut.org> writes:
>> I have committed this patch set. I also added a test into the C++ module.
>
> BF member ayu is failing said test:
>
>
> ccache clang++-4.0 -std=gnu++11 -Wall -Wpointer-arith -Werror=vla -Wmissing-format-attribute -Wimplicit-fallthrough -Wformat-security -fno-strict-aliasing -fwrapv -g -O2 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -I. -I. -I../../../../src/include -D_GNU_SOURCE -I/usr/include/libxml2 -c -o test_cplusplusext.o test_cplusplusext.cpp
> test_cplusplusext.cpp:66:3: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]
> case 2:
> ^
> test_cplusplusext.cpp:66:3: note: insert '[[clang::fallthrough]];' to silence this warning
> case 2:
> ^
> [[clang::fallthrough]];
> test_cplusplusext.cpp:66:3: note: insert 'break;' to avoid fall-through
> case 2:
> ^
> break;
> 1 warning generated.
>
>
> I don't know if it's worth catering to this extremely old
> clang version ...
It appears that we could satisfy clang 6 through 9 with something like
#elif defined(__clang__)
#define pg_fallthrough [[clang::fallthrough]]
#else
Clang >=10 support the existing #elif __has_attribute(fallthrough) branch.
But AFAICT, clang 5 and older are completely broken in this regard,
because they react to the presence of [[clang::fallthrough]] with a
syntax error ("error: expected expression"). Not even clang's own
example code[0] works.
[0]:
https://releases.llvm.org/5.0.2/tools/clang/docs/AttributeReference.html#fallthrough-clang-fallthrough
Also, this only appears to affect C++. In C mode, before clang 10, the
warning option -Wimplicit-fallthrough doesn't appear to do anything.
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Enable -Wimplicit-fallthrough option for clang
- 0284e07599a5 19 (unreleased) landed
-
Fix additional fallthrough warning
- 3f7a0e1e55ef 19 (unreleased) landed
-
Fix additional fallthrough warnings from clang
- 3a63b76571ba 19 (unreleased) landed
-
test_cplusplusext: Add C++ pg_fallthrough test case
- 2f2c9d836373 19 (unreleased) landed
-
Use fallthrough attribute instead of comment
- 8354b9d6b602 19 (unreleased) landed
-
Remove useless fallthrough annotation
- 0c3fbb3fef1e 19 (unreleased) landed