Commits

Chris Lattner committed d18740d603b
Fix <rdar://problem/19773562> Closures executed immediately { like this }() are not automatically @noescape In addition to being better for performance in these cases, this disables the "self." requirement in these blocks. {}() constructs are often used to work around statements that are not exprs in Swift, so they are reasonably important. Fixing this takes a couple of pieces working together: - Add a new 'extraFunctionAttrs' map to the ConstraintSystem for solution invariant function attributes that are inferred (like @noescape). - Teach constraint simplification of function applications to propagate @noescape between unified function types. - Teach CSGen of ApplyExprs to mark the callee functiontype as noescape when it is obviously a ClosureExpr. This is a very limited fix in some ways: you could argue that ApplyExpr should *always* mark its callee as noescape. However, doing so would just introduce a ton of function conversions to remove it again, so we don't do that. Swift SVN r27723