Bug 7528 – The core.atomic module does not have implementations when compiling with -D.

Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
druntime
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-02-16T17:25:00Z
Last change time
2012-02-23T01:07:08Z
Assigned to
nobody
Creator
opantm+spam

Comments

Comment #0 by opantm+spam — 2012-02-16T17:25:43Z
Most methods in core.atomic are versioned out with a stub method replacing them when generating documentation. If you attempt to use something like atomicOp for example, it will still compile but do nothing and always return T.init (leading to quite a bit of confusion). If you try to use cas, you get a symbol undefined, as the actual implementation is excluded when version(D_Doc) is set. Test case: module Test; import std.stdio; import core.atomic; void main() { int* a = new int(); *a = 2; int* b = new int(); *b = 1; bool Result = cas(cast(shared)&a, cast(shared)a, cast(shared)b); writeln(Result, ": ", *a, ", ", *b); } Compile with 'dmd test.d' and it runs and prints "true: 1, 1". Compile with 'dmd test.d -D' and it will fail to link with "Error 42: Symbol Undefined _D4core6atomic20__T3casTPOiTPOiTPOiZ3casFPOPiOxPiOPiZb".
Comment #1 by opantm+spam — 2012-02-23T01:07:08Z
Looks like this is a duplicate of 5930, which didn't appear in my search for atomic. Worth keeping in mind that this does cause incorrect results to be generated without warning when using atomic operations. *** This issue has been marked as a duplicate of issue 5930 ***