You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
% uname -a
Linux ubuntu 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Additional Detail from JIRA
Votes
0
Component/s
Labels
Bug
Assignee
None
Priority
Medium
md5: 725f7ac2dd6335a0f444849544c7c699
duplicates:
SR-397 Linux - module using <dispatch/dispatch.h> does not compile cleanly with "swift build"
Issue Description:
I’ve create a system module for libdispatch, but when I import it, I don’t see anything guarded by BLOCKS because the compiler doesn't pass -Xcc -fblocks.
% catPackage.swiftimportPackageDescriptionletpackage = Package(name: "CDispatch”)% cat module.modulemap module CDispatch [system] {umbrella header "/usr/local/include/dispatch/dispatch.h"link "dispatch"
export *
}
% uname -a
Linux ubuntu 4.2.0-16-generic #​19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
% swift -I path/to/CDispatch-1.0.2
Welcome to Swift version 2.2-dev (LLVM 3ebdbb2c7e, Clang f66c5bb67b, Swift 1f2908b4f7). Type :help for assistance.
1> import CDispatch
2> dispatch_group_
Available completions:
dispatch_group_async_f(group: dispatch_group_t, queue: dispatch_queue_t, context: UnsafeMutablePointer<Void>, work: dispatch_function_t(UnsafeMutablePointer<Void>) -> Void) -> Void
dispatch_group_create() -> dispatch_group_t
dispatch_group_enter(group: dispatch_group_t) -> Void
dispatch_group_leave(group: dispatch_group_t) -> Void
dispatch_group_notify_f(group: dispatch_group_t, queue: dispatch_queue_t, context: UnsafeMutablePointer<Void>, work: dispatch_function_t(UnsafeMutablePointer<Void>) -> Void) -> Void
dispatch_group_t
dispatch_group_wait(group: dispatch_group_t, timeout: dispatch_time_t) -> Int
The text was updated successfully, but these errors were encountered:
This code moves the block to the heap. The retain-release overhead here is probably even less that on OS X (where it’s an ObjC RR). Another option would be to use raw memory by means of an UnsafeMutablePointer. I don't know enough about the implementation details to say what the performance impact would be, though. Either way it's negligible in my opinion.
Right, sorry, let me clarify: I meant "without RR" as "without the block ABI changes indicated on the mailing list".
The cost of the extra box is neither here nor there, I just think it'd be prudent to avoid if we didn't have to. But that's irrelevant to the larger point which is "OMG cool workaround!". 🙂
Environment
swift-2.2-SNAPSHOT-2016-01-11-a-ubuntu15.10
% uname -a
Linux ubuntu 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Additional Detail from JIRA
md5: 725f7ac2dd6335a0f444849544c7c699
duplicates:
Issue Description:
I’ve create a system module for libdispatch, but when I import it, I don’t see anything guarded by BLOCKS because the compiler doesn't pass
-Xcc -fblocks
.The text was updated successfully, but these errors were encountered: