From 6194f37e1a0cf12a7e5b94505f9a9dba5b1a0700 Mon Sep 17 00:00:00 2001 From: Kim Topley Date: Thu, 29 Jun 2017 16:10:59 -0700 Subject: [PATCH] Fix warnings in DispatchQueue.sync() implementation when using a compiler with SE-0176 support. --- stdlib/public/SDK/Dispatch/Queue.swift | 12 +++++++----- test/stdlib/Dispatch.swift | 7 +++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/stdlib/public/SDK/Dispatch/Queue.swift b/stdlib/public/SDK/Dispatch/Queue.swift index 64315ab5c87db..36f64830f7714 100644 --- a/stdlib/public/SDK/Dispatch/Queue.swift +++ b/stdlib/public/SDK/Dispatch/Queue.swift @@ -232,11 +232,13 @@ public extension DispatchQueue { { var result: T? var error: Error? - fn { - do { - result = try work() - } catch let e { - error = e + withoutActuallyEscaping(work) { _work in + fn { + do { + result = try _work() + } catch let e { + error = e + } } } if let e = error { diff --git a/test/stdlib/Dispatch.swift b/test/stdlib/Dispatch.swift index 6d5ebc5dbe08c..a9a5d813572e0 100644 --- a/test/stdlib/Dispatch.swift +++ b/test/stdlib/Dispatch.swift @@ -40,6 +40,13 @@ DispatchAPI.test("DispatchGroup creation") { expectNotNil(group) } +DispatchAPI.test("Dispatch sync return value") { + let value = 24; + let q = DispatchQueue(label: "Test") + let result = q.sync() { return 24 } + expectEqual(value, result) +} + DispatchAPI.test("dispatch_block_t conversions") { var counter = 0 let closure = { () -> Void in