diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2024-06-27 00:24:51 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-26 18:24:51 +0200 |
commit | 828cd58d8a0376a5b7a6ad58d73d66617b37629a (patch) | |
tree | d25adaf5f09727eb38afe2990584ad7f184ef037 /tests/ccgbugs | |
parent | 8096fa45bdf5367f0d89ffe22ba5776ad1abf097 (diff) | |
download | Nim-828cd58d8a0376a5b7a6ad58d73d66617b37629a.tar.gz |
fixes #9940; genericAssign does not take care of the importC variables in refc [backport] (#23761)
fixes #9940
Diffstat (limited to 'tests/ccgbugs')
-rw-r--r-- | tests/ccgbugs/t13062.nim | 7 | ||||
-rw-r--r-- | tests/ccgbugs/tcgbug.nim | 28 |
2 files changed, 33 insertions, 2 deletions
diff --git a/tests/ccgbugs/t13062.nim b/tests/ccgbugs/t13062.nim index a8d2c1fec..cfda1da7c 100644 --- a/tests/ccgbugs/t13062.nim +++ b/tests/ccgbugs/t13062.nim @@ -24,7 +24,10 @@ type fulfilled: Atomic[bool] var x: Pledge -when defined(gcRefc): +when defined(cpp): + # TODO: fixme + discard "it doesn't work for refc/orc because of contrived `Atomic` in cpp" +elif defined(gcRefc): doAssert x.repr == "[p = nil]" -elif not defined(cpp): # fixme # bug #20081 +else: # fixme # bug #20081 doAssert x.repr == "Pledge(p: nil)" diff --git a/tests/ccgbugs/tcgbug.nim b/tests/ccgbugs/tcgbug.nim index 871d6b59c..2eddc6fdd 100644 --- a/tests/ccgbugs/tcgbug.nim +++ b/tests/ccgbugs/tcgbug.nim @@ -4,6 +4,7 @@ success M1 M2 ok ''' +matrix: "--mm:refc;--mm:orc" """ type @@ -133,3 +134,30 @@ proc foo = # bug #23280 doAssert L mod 6 == 0 foo() + +block: # bug #9940 + {.emit:"""/*TYPESECTION*/ +typedef struct { int base; } S; +""".} + + type S {.importc: "S", completeStruct.} = object + base: cint + proc init(x:ptr S) = + x.base = 1 + + type + Foo = object + a: seq[float] + b: seq[float] + c: seq[float] + d: seq[float] + s: S + + proc newT(): Foo = + var t: Foo + t.s.addr.init + doAssert t.s.base == 1 + t + + var t = newT() + doAssert t.s.base == 1 |