Files
swift-mirror/test/expr/closure/single_expr.swift
Chris Willmore d4109f125f Walk into single-expr closure that have been coerced to void
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
2015-09-03 02:58:29 +00:00

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") } }