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

Robert Widmann devteam.codafi at gmail.com
Sat Nov 26 17:25:11 CST 2016

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

I’ve filed SR-3278 <https://bugs.swift.org/browse/SR-3278> to track this as well.


~Robert Widmann
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20161126/72dc183f/attachment.html>

More information about the swift-dev mailing list