https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118664
Bug ID: 118664
Summary: Improve -Wswitch and -Wswitch-enum warnings for enum
types
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: pipcet at protonmail dot com
Target Milestone: ---
This is a wishlist item. I have a patch, but it's not finished yet.
I would like GCC to warn about a non-exhaustive switch (x) { ... } expression
where x is not of enum type, but the case labels are members of an enum.
This would make it more useful for becoming aware of extensions of
externally-provided anonymous enums.
There is also a weaker second proposal: Warn only about code such as
enum {
ENUM_CASE_A,
ENUM_CASE_B,
};
void doswitch (int x) {
switch ((typeof (ENUM_CASE_A))x) {
case ENUM_CASE_A:
return;
}
while (1);
}
I believe that typeof (ENUM_CASE_A) is equivalent to "int", and must be, for
code generation. I don't believe there is a prohibition in the C standard
against remembering where the type came from for the sole purpose of printing
better warnings.
If the second proposal is also unacceptable, maybe there's a way to add this to
the analyzer instead?
For the purposes of sending the patch, should I assume it's a separate new
warning flag or that it's covered by -Wswitch-enum?
Also, would it be a good idea to detect mixed enumeration switches, where some
case labels refer to one enum and others to another? While doing that is
sometimes useful for extending enums, it can also be a genuine bug.