mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
When assigning discriminators to autoclosure expressions, make sure to walk into single-expression closures even when they have been converted to return void, because they aren't type-checked separately. <rdar://problem/22441425> Swift compiler "INTERNAL ERROR: this diagnostic should not be produced" Swift SVN r31654
45 lines
1.2 KiB
Swift
45 lines
1.2 KiB
Swift
// RUN: %target-parse-verify-swift
|
|
|
|
func takeIntToInt(f: (Int) -> Int) { }
|
|
func takeIntIntToInt(f: (Int, Int) -> Int) { }
|
|
|
|
// Simple closures with anonymous arguments
|
|
func simple() {
|
|
takeIntToInt({$0 + 1})
|
|
takeIntIntToInt({$0 + $1 + 1})
|
|
}
|
|
|
|
// Anonymous arguments with inference
|
|
func myMap<T, U>(array: [T], _ f: (T) -> U) -> [U] {}
|
|
|
|
func testMap(array: [Int]) {
|
|
var farray = myMap(array, { Float($0) })
|
|
var _ : Float = farray[0]
|
|
let farray2 = myMap(array, { (x : Int) in Float(x) })
|
|
farray = farray2
|
|
_ = farray
|
|
}
|
|
|
|
// Nested single-expression closures -- <rdar://problem/20931915>
|
|
class NestedSingleExpr {
|
|
private var b: Bool = false
|
|
private func callClosure(callback: Void -> Void) {}
|
|
|
|
func call() {
|
|
callClosure { [weak self] in
|
|
self?.callClosure {
|
|
self?.b = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Autoclosure nested inside single-expr closure should get discriminator
|
|
// <rdar://problem/22441425> Swift compiler "INTERNAL ERROR: this diagnostic should not be produced"
|
|
struct Expectation<T> {}
|
|
func expect<T>(@autoclosure expression: () -> T) -> Expectation<T> {
|
|
return Expectation<T>()
|
|
}
|
|
func describe(closure: () -> ()) {}
|
|
func f() { describe { expect("what") } }
|