blob: 9187cdd51cabcb10c10554b7fc6d2c01494e2c2e [file] [log] [blame]
// RUN: %target-run-simple-swift
// REQUIRES: executable_test
import StdlibUnittest
// Make sure that in the following code we do not leak the case of the enum.
protocol MyProtocol {}
// An enum that wraps LeakingClass
enum LeakingEnum1: MyProtocol {
case eNone1
case eLeakingClass1(LifetimeTracked)
}
// An enum that wraps LeakingClass
enum LeakingEnum2 : MyProtocol {
case eNone2
case eLeakingClass2(LifetimeTracked)
}
var Tests = TestSuite("patternmatch_on_enum_protocol_leak")
Tests.test("dontLeak") {
do {
let leakingClass = LifetimeTracked(0)
let leakEnum = LeakingEnum1.eLeakingClass1(leakingClass)
let control: MyProtocol = leakEnum
// This switch case order, interleaving LeakingEnum1 and LeakingEnum2 cases triggers the leak.
switch control
{
case LeakingEnum1.eNone1: break
case LeakingEnum2.eNone2: break
case LeakingEnum1.eLeakingClass1: break
case LeakingEnum2.eLeakingClass2: break
default: break
}
}
expectEqual(0, LifetimeTracked.instances)
}
runAllTests()