Move -Wcovered-switch-default out of -Wswitch (and -Wall), and make it an opt-in warning.
This is a great warning, but it was observed that a ton of real world code violates it all the time for (semi-)legitimate reasons. This warnings is fairly pedantic, which is good, but not for everyone. For example, there is a fair amount of idiomatic code out there that does "default: abort()", and similar idioms. Addresses <rdar://problem/10814651>. llvm-svn: 150055
This commit is contained in:
parent
afa6e249cb
commit
8d968ad5c0
|
@ -184,9 +184,9 @@ def InvalidOffsetof : DiagGroup<"invalid-offsetof">;
|
|||
def : DiagGroup<"strict-prototypes">;
|
||||
def StrictSelector : DiagGroup<"strict-selector-match">;
|
||||
def MethodDuplicate : DiagGroup<"duplicate-method-match">;
|
||||
def SwitchEnum : DiagGroup<"switch-enum">;
|
||||
def CoveredSwitchDefault : DiagGroup<"covered-switch-default">;
|
||||
def Switch : DiagGroup<"switch", [CoveredSwitchDefault]>;
|
||||
def SwitchEnum : DiagGroup<"switch-enum">;
|
||||
def Switch : DiagGroup<"switch">;
|
||||
def Trigraphs : DiagGroup<"trigraphs">;
|
||||
|
||||
def : DiagGroup<"type-limits">;
|
||||
|
|
|
@ -5064,7 +5064,7 @@ def warn_missing_cases : Warning<
|
|||
|
||||
def warn_unreachable_default : Warning<
|
||||
"default label in switch which covers all enumeration values">,
|
||||
InGroup<CoveredSwitchDefault>;
|
||||
InGroup<CoveredSwitchDefault>, DefaultIgnore;
|
||||
def warn_not_in_enum : Warning<"case value not in enumerated type %0">,
|
||||
InGroup<Switch>;
|
||||
def err_typecheck_statement_requires_scalar : Error<
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify -Wswitch-enum %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify -Wswitch-enum -Wcovered-switch-default %s
|
||||
void f (int z) {
|
||||
while (z) {
|
||||
default: z--; // expected-error {{statement not in switch}}
|
||||
|
|
Loading…
Reference in New Issue