Я получаю странный Bus Error
при работе, что кажется совершенно безопасным быстрым кодом. Я пытался уменьшить его до минимального тестового случая следующим образом:Почему повторное закрытие замыкания вызывает ошибку шины в swift?
Apple Swift version 2.2-dev (LLVM 3ebdbb2c7e, Clang f66c5bb67b, Swift 0ddf238ad7)
Target: x86_64-apple-macosx10.9
Этот код:
public enum MyError: ErrorType {
case SomeError(code: Int)
}
public typealias MyType =() throws -> Bool
public class Foo {
var a:MyType = {() throws -> Bool in
print("A")
return true
}
var b:MyType = {() throws -> Bool in
print("B")
return true
}
var c:MyType = {() throws -> Bool in
print("C")
throw MyError.SomeError(0)
}
}
public func handle<T>(test:T) {
let mirror = Mirror(reflecting: test)
print(mirror.subjectType)
for child in mirror.children {
if let callable = child.value as? MyType {
do {
try callable()
}
catch MyError.SomeError(let id) {
print(id)
}
catch {
print("unknown error")
}
}
}
}
let foo = Foo()
handle(foo)
Формирует этот вывод:
Foo
A
B
C
Bus error: 10
Запуск в отладчике отлично работает, поэтому я предполагаю, что это связано с проблемой синхронизации во время выполнения.
Я делаю что-то незаконное или небезопасное в этом коде?
Являются ли исключения незаконными в закрытии?
В чем причина этой ошибки?
Edit:
Я создал ошибку на быстром выпуске трекера для этого сейчас здесь: https://bugs.swift.org/browse/SR-324