-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 This is a bit of a tangent, but: There are a whole bunch of places in layout, and probably elsewhere, where we have the following catch-22: if you have a switch statement over the values of an enumeration, gcc and clang (with -Wall) will warn you about enumeration values that are not handled, but only if there is no default: clause. In basically all of the instances I know about, "default: MOZ_CRASH()" would be appropriate, but has been omitted in the name of continuing to get that warning (many of these enumerations do regularly get new values added).
I had been meaning for some time to file a feature request with the gcc people for some way to get the warning even with the default case present, but it turns out it's already there: -Wswitch-enum. $ cat test.c enum Foo { Bar, Baz, Quux }; extern void a(void); extern void b(void); extern void c(void); void dispatch_1(enum Foo x) { switch (x) { case Bar: a(); break; case Baz: b(); break; default: __builtin_trap(); } } void dispatch_2(enum Foo x) { switch (x) { case Bar: a(); break; case Baz: b(); break; } } $ gcc -Wall -Wextra -fsyntax-only test.c test.c: In function ‘dispatch_2’: test.c:18:3: warning: enumeration value ‘Quux’ not handled in switch [-Wswitch] switch (x) { ^ $ gcc -Wall -Wextra -Wswitch-enum -fsyntax-only test.c test.c: In function ‘dispatch_1’: test.c:9:3: warning: enumeration value ‘Quux’ not handled in switch [-Wswitch-enum] switch (x) { ^ test.c: In function ‘dispatch_2’: test.c:18:3: warning: enumeration value ‘Quux’ not handled in switch [-Wswitch] switch (x) { ^ Similarly for clang. Dunno about MSVC, but the cases of this that I know about are all in OS-independent code so it wouldn't be a problem. The downside of turning this on would be that any switch statements that *deliberately* include only a subset of the enumerators, plus a default case, would now have to be expanded to cover all the enumerators. I would try it and report on how unpleasant that turns out to be, but my development box has taken to corrupting its filesystem if I merely do a 'hg update', so I'm kind of stuck, there. Anyone interested in trying it? zw -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 Comment: Using GnuPG with Icedove - http://www.enigmail.net/ iQIcBAEBCAAGBQJTOuGbAAoJEJH8wytnaapke6YP/i1yyvKeWMbXX6b6eIa2Dv/v njT6gRztp6V3LzreI8ShFNoUpt++Grvr1ZjO3cfpVOHujnq6GT4tJLG6KHI/E3MH DdsAs6BdirmNwDhsWElQhZqtZ1f0ncu3/u2+tC2yOWEEkkTtJwjx7wBDQLZDrRdz q5e0gE0wLh8pK1qf+LrU36o6N8T2+GLgqbEkNn/RnfGWINxG4PINm8EAZuFMnGt8 0Lpa9W03YVr1c53LpnH80jsfZ8JL4zszD7Sw1clTZgQEGeP31OXZaRZIFk+OAp3P Yo13utlWb+AeSL8uQtQwW55YQAdJxx+fi7o+1szR/AgUfPs32dL6kmCIxcxx/eUb 0E1kmREhtmUKRA3DAM7SQ6DVXAS4TS+Rxa0HutLHHywU6GabNTeEMdyM8bseet+y SlPqXf9o4UIwUuE9Sv+Jxvp9QnoIP6tFwyu99NVGDyPK6OoVRH4rjTeszxQckFs2 wjGmS0yGAsNgMcRHgav2CDvJVL+R+H0irgXQPaEl0CjonI9lGFYivp6tFZDgmDmI u4sK9PEHhX/aECOqZgjexbS2QZGa7PcLjNfB251kl5/Oa+dTMNsvFH/pHm7s8rrZ c/02VCzpl2b/qVkcwzggCZIFFu8J66YiniZlpnCBqrPpOcIGhpgMRJgbYSavgWSx kwELrg4z3S+dsOs6x6zb =b0ly -----END PGP SIGNATURE----- _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform