diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 88d177800b..dcf0c4c931 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -2321,7 +2321,7 @@ proc genWasMoved(p: BProc; n: PNode) = # [addrLoc(p.config, a), getTypeDesc(p.module, a.t)]) proc genMove(p: BProc; n: PNode; d: var TLoc) = - var a: TLoc = initLocExpr(p, n[1].skipAddr) + var a: TLoc = initLocExpr(p, n[1].skipAddr, {lfEnforceDeref}) if n.len == 4: # generated by liftdestructors: var src: TLoc = initLocExpr(p, n[2]) diff --git a/tests/destructor/tmove.nim b/tests/destructor/tmove.nim index 2762aff900..da91442def 100644 --- a/tests/destructor/tmove.nim +++ b/tests/destructor/tmove.nim @@ -16,3 +16,16 @@ block: doAssert s == 2 foo() + +import std/deques + +block: # bug #24319 + var queue = initDeque[array[32, byte]]() + for i in 0 ..< 5: + let element: array[32, byte] = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, + ] + queue.addLast(element) + + doAssert queue.popLast[^1] == byte(1)