[swift-dev] [Pitch] Remove "Default will never be executed" Warning?

Dave Abrahams dabrahams at apple.com
Mon Nov 28 21:25:14 CST 2016


on Sun Nov 27 2016, Slava Pestov <swift-dev-AT-swift.org> wrote:

>> On Nov 27, 2016, at 4:32 PM, David Sweeris via swift-dev <swift-dev at swift.org> wrote:
>> 
>>> 
>>> On Nov 26, 2016, at 5:25 PM, Robert Widmann via swift-dev <swift-dev at swift.org
> <mailto:swift-dev at swift.org>> wrote:
>>> 
>
>>> Hello all,
>>> 
>>> I’ve seen and been a part of a number of conversations recently where talk of planning for “resilient enums”, or even just authors that ship frameworks that will eventually offer a binary option that export enum-based APIs.  The consensus seems to be that the only safe way to deal with this situation is to always cover a `switch` statement with a default, regardless of whether the totality checker thinks you’ve covered all cases.  Currently, the compiler warns when this is the case, as in stdlib
>>> 
>>> extension ProcessTerminationStatus {
>>>   var isSwiftTrap: Bool {
>>>     switch self {
>>>     case .exit(_):
>>>       return false
>>>     case .signal(let signal):
>>>       return CInt(signal) == SIGILL || CInt(signal) == SIGTRAP
>>>     default:
>>>       // This default case is needed for standard library builds where
>>>       // resilience is enabled
>>>       return false
>>>     }
>>>   }
>>> }
>>> 
>>> I think this warning doesn’t actually serve a purpose and I’d like to remove it, or at the very
> least curb it.  Currently, I see three paths forward:
>>> 
>>> 1) Do nothing.
>>> 2) Completely remove the diagnostic
>>> 3) Only emit the diagnostic when the case-tree is switching over enum(s) declared inside the
> current module.
>> 
>> Has the “resilient enum” thing been finalized, or is this kind of code just a preventative
> measure?
>> 
>> Also, if “resilience” is a compiler flag, there's a fourth option: Disable the warning on builds
> that have “resilience” enabled.
>
> The warning is already gone (and the default cause is required) when
> the standard library and overlays are built with resilience
> enabled. The issue is that resilience is off by default.
>
> I agree the warning is annoying; we should figure out something.

There should also be a way to write code that will compile without
warnings whether or not you have resilience enabled. ;-)

-- 
-Dave



More information about the swift-dev mailing list