summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorflywind <xzsflywind@gmail.com>2021-09-20 15:50:20 +0800
committerGitHub <noreply@github.com>2021-09-20 09:50:20 +0200
commitee9795f76f1125e0addbf8cf5471cf188ad7f57a (patch)
treec03cdd24a24abc87fbc0069bb07c1697da826701
parentc56ba3f06a3d77ff5eabb3b48ecd6a752e5a3ea8 (diff)
downloadNim-ee9795f76f1125e0addbf8cf5471cf188ad7f57a.tar.gz
fix #18844 (#18851)
-rw-r--r--lib/pure/concurrency/atomics.nim8
-rw-r--r--tests/stdlib/concurrency/tatomics.nim22
2 files changed, 25 insertions, 5 deletions
diff --git a/lib/pure/concurrency/atomics.nim b/lib/pure/concurrency/atomics.nim
index bdf1e8cc2..b252789fb 100644
--- a/lib/pure/concurrency/atomics.nim
+++ b/lib/pure/concurrency/atomics.nim
@@ -288,10 +288,10 @@ else:
     type
       # Atomic* {.importcpp: "_Atomic('0)".} [T] = 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
+      AtomicInt8 {.importc: "_Atomic NI8".} = int8
+      AtomicInt16 {.importc: "_Atomic NI16".} = int16
+      AtomicInt32 {.importc: "_Atomic NI32".} = int32
+      AtomicInt64 {.importc: "_Atomic NI64".} = int64
 
     template atomicType*(T: typedesc[Trivial]): untyped =
       # Maps the size of a trivial type to it's internal atomic type
diff --git a/tests/stdlib/concurrency/tatomics.nim b/tests/stdlib/concurrency/tatomics.nim
index 260d00990..beae0ed6d 100644
--- a/tests/stdlib/concurrency/tatomics.nim
+++ b/tests/stdlib/concurrency/tatomics.nim
@@ -1,6 +1,6 @@
 # test atomic operations
 
-import atomics, bitops
+import std/[atomics, bitops]
 
 type
   Object = object
@@ -607,3 +607,23 @@ block clear:
   doAssert not location.testAndSet
   location.clear(moRelease)
   doAssert not location.testAndSet
+
+block: # bug #18844
+  when not defined(cpp): # cpp pending pr #18836
+    type
+      Deprivation = object of RootObj
+        memes: Atomic[int]
+      Zoomer = object
+        dopamine: Deprivation
+
+    block:
+      var x = Deprivation()
+      var y = Zoomer()
+      doAssert x.memes.load == 0
+      doAssert y.dopamine.memes.load == 0
+
+    block:
+      var x: Deprivation
+      var y: Zoomer
+      doAssert x.memes.load == 0
+      doAssert y.dopamine.memes.load == 0