diff options
-rw-r--r-- | compiler/semstmts.nim | 3 | ||||
-rw-r--r-- | tests/ccgbugs/tborrowmagic.nim | 8 |
2 files changed, 11 insertions, 0 deletions
diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index fb01127fc..c2392ec8c 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -1173,6 +1173,9 @@ proc semBorrow(c: PContext, n: PNode, s: PSym) = if b != nil: # store the alias: n.sons[bodyPos] = newSymNode(b) + # Carry over the original symbol magic, this is necessary in order to ensure + # the semantic pass is correct + s.magic = b.magic else: localError(c.config, n.info, errNoSymbolToBorrowFromFound) diff --git a/tests/ccgbugs/tborrowmagic.nim b/tests/ccgbugs/tborrowmagic.nim new file mode 100644 index 000000000..8d42ddcd8 --- /dev/null +++ b/tests/ccgbugs/tborrowmagic.nim @@ -0,0 +1,8 @@ +type + Bytes = distinct seq[byte] + +proc add(x: var Bytes; b: byte) {.borrow.} +var x = @[].Bytes +x.add(42) +let base = cast[seq[byte]](x) +doAssert base.len == 1 and base[0] == 42 |