[swift-evolution] switch must be exhaustive, consider adding a default clause
Josh Parmenter
jparmenter at vectorform.com
Mon Apr 10 11:58:44 CDT 2017
On Apr 10, 2017, at 9:53 AM, Kevin Nattinger <swift at nattinger.net<mailto:swift at nattinger.net>> wrote:
On Apr 10, 2017, at 9:18 AM, Josh Parmenter via swift-evolution <swift-evolution at swift.org<mailto:swift-evolution at swift.org>> wrote:
case .none isn’t handled.
It shouldn’t need to be handled in the second switch because it’s impossible. Not just developer thinks “impossible” but easily provable by static analysis the compiler is doing it anyway—I wouldn’t be surprised if including the case resulted in an “unreachable code” warning (in fact, it probably should).
Why? Because of preconditionFailure? That COULD be optimized out as per this documentation:
/// * In `-Ounchecked` builds, the optimizer may assume that this function is
/// never called. Failure to satisfy that assumption is a serious
/// programming error.
So I’m not sure if that is the case or not.
This should probably be on the swift-users list though, no?
File a bug, IMO.
Yes - it should probably be looked at by someone who would know if this a bug or the expected behavior.
Best,
Josh
Best,
Josh
On Apr 8, 2017, at 11:29 AM, Drew Crawford via swift-evolution <swift-evolution at swift.org<mailto:swift-evolution at swift.org><mailto:swift-evolution at swift.org>> wrote:
Is there a good reason we do not compile this:
import UIKit
func foo(operation: UINavigationControllerOperation) {
switch(operation) {
case .push: /* snip */ break
case .pop: /* snip */ break
default:
preconditionFailure("This is a silly operation")
}
switch(operation) {
case .push: /* snip */ break
case .pop: /* snip */ break
//error: Switch must be exhaustive, consider adding a default clause
}
}
The switch *is* exhaustive, because the default case is unreachable. The compiler could infer as much from branch analysis.
_______________________________________________
swift-evolution mailing list
swift-evolution at swift.org<mailto:swift-evolution at swift.org><mailto:swift-evolution at swift.org>
https://lists.swift.org/mailman/listinfo/swift-evolution
Joshua Parmenter | Engineering Lead, Apple Technologies
T 248 777 7777
C 206 437 1551
F 248 616 1980
www.vectorform.com<http://www.vectorform.com/><http://www.vectorform.com/>
Vectorform
2107 Elliott Ave Suite 303
Seattle, WA 98121 USA
Think Tank. Lab. Studio.
We invent digital products and experiences.
SEATTLE | DETROIT | NEW YORK | MUNICH | HYDERABAD
_______________________________________________
swift-evolution mailing list
swift-evolution at swift.org<mailto:swift-evolution at swift.org>
https://lists.swift.org/mailman/listinfo/swift-evolution
More information about the swift-evolution
mailing list