Subject: Re: enable fallthrough warnings on clang

From: Jelte Fennema-Nio <[email-masked]>
Date: Tue, 20 Jan 2026 16:03:59 +0100

On Tue, 20 Jan 2026 at 12:16, Peter Eisentraut <[email-masked]> wrote:
> So my proposal is that we wrap the appropriate attribute into a
> pg_fallthrough macro, and replace the current comments with that.

All looks okay to me. The only thing that stood out is that it checks
for C++ with __cpp_attributes instead of __cplusplus. Is it really
worth using this more specific attribute? Given that we're already
requiring C++11 and afaict all C++11 compilers should support the
general notion of attributes.

---

From: Peter Eisentraut <[email-masked]>
Date: Wed, 21 Jan 2026 12:34:42 +0100

> general notion of attributes.

I agree.  I will make that change.

---

From: Peter Eisentraut <[email-masked]>
Date: Mon, 23 Feb 2026 08:32:34 +0100

> I agree.  I will make that change.

I have committed this patch set.  I also added a test into the C++ module.

---

From: Tom Lane <[email-masked]>
Date: Mon, 06 Apr 2026 17:31:49 -0400

> 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 ...

			regards, tom lane

---

From: Peter Eisentraut <[email-masked]>
Date: Tue, 7 Apr 2026 16:31:49 +0200

> I don't know if it's worth catering to this extremely old

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.

---

From: Tom Lane <[email-masked]>
Date: Tue, 07 Apr 2026 10:35:27 -0400

Peter Eisentraut <[email-masked]> writes:
>> ...

> syntax error ("error: expected expression").  Not even clang's own 

Hah, so we'd make it worse not better by adding
[[clang::fallthrough]].  Let's leave well enough alone then.

			regards, tom lane