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.

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

Thanks,

~Robert Widmann
_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to