diff options
author | Bung <crc32@qq.com> | 2020-11-12 16:16:40 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-12 09:16:40 +0100 |
commit | 826e62953faa1f6cd9bac582246186935af4b8e6 (patch) | |
tree | 09dc416bf08bb46057c091aa3db5f396de354f16 /lib | |
parent | a81434a890d70e7146c440c59caadc701c6099b3 (diff) | |
download | Nim-826e62953faa1f6cd9bac582246186935af4b8e6.tar.gz |
fix #12726 Cannot take the compile-time sizeof Atomic types (#15928)
* fix #12726 Cannot take the compile-time sizeof Atomic types * fix for arch 32
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/concurrency/atomics.nim | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/lib/pure/concurrency/atomics.nim b/lib/pure/concurrency/atomics.nim index eaa811aa6..dc575c6c0 100644 --- a/lib/pure/concurrency/atomics.nim +++ b/lib/pure/concurrency/atomics.nim @@ -51,10 +51,11 @@ when defined(cpp) or defined(nimdoc): ## with other moSequentiallyConsistent operations. type - Atomic* {.importcpp: "std::atomic".} [T] = object + Atomic*[T] {.importcpp: "std::atomic", completeStruct.} = object ## An atomic object with underlying type `T`. + raw: T - AtomicFlag* {.importcpp: "std::atomic_flag".} = object + AtomicFlag* {.importcpp: "std::atomic_flag", size: 1.} = object ## An atomic boolean state. # Access operations @@ -249,10 +250,10 @@ else: type # Atomic* {.importcpp: "_Atomic('0)".} [T] = object - AtomicInt8 {.importc: "_Atomic NI8".} = object - AtomicInt16 {.importc: "_Atomic NI16".} = object - AtomicInt32 {.importc: "_Atomic NI32".} = object - AtomicInt64 {.importc: "_Atomic NI64".} = object + AtomicInt8 {.importc: "_Atomic NI8", size: 1.} = object + AtomicInt16 {.importc: "_Atomic NI16", size: 2.} = object + AtomicInt32 {.importc: "_Atomic NI32", size: 4.} = object + AtomicInt64 {.importc: "_Atomic NI64", size: 8.} = object template atomicType*(T: typedesc[Trivial]): untyped = # Maps the size of a trivial type to it's internal atomic type @@ -262,7 +263,7 @@ else: elif sizeof(T) == 8: AtomicInt64 type - AtomicFlag* {.importc: "atomic_flag".} = object + AtomicFlag* {.importc: "atomic_flag", size: 1.} = object Atomic*[T] = object when T is Trivial: |