Open z2oh opened 3 hours ago
Another interesting bit, adding a default
handler avoids the crash (and should be a noop as the match is exhaustive). That is, this program compiles:
public struct ExampleType: Equatable {
public static let test1 = Self()
}
public enum ExampleEnum: Equatable {
case exampleCase(ExampleType)
public var exampleVar: [String] {
switch self {
case let .exampleCase(exampleType):
return []
case .exampleCase(.test1):
return []
default:
fatalError("unreachable")
}
}
}
Description
We started seeing this crash with nightly windows toolchains around the beginning of this month (Sept. 6th or earlier). It seems in some cases when patterns overlap, instead of the more specialized pattern being given a higher priority, the compiler will crash.
Reproduction
Stack dump
Expected behavior
The code should compile
Environment
compnerd.org Swift version 6.1-dev (LLVM cdc8e8b92cfb482, Swift 4bb9a587fa3c1f1) Target: x86_64-unknown-windows-msv
Additional information
The above trace (partially) symbolized with windbg:
Un-minimizing the reproducer a bit gives a slightly different error complaining about "Found a leak due to a consuming post-dominance failure!" as well as crashing with a stack trace. This was the initial error we saw in production code. I'm guessing the fully minimal repro is more representative of the underlying issue and this additional error stems from that root problem, but in case it is useful, here is a slightly less minimal reproduction and the associated error:
crashes with