diff options
author | LemonBoy <LemonBoy@users.noreply.github.com> | 2018-09-11 20:32:25 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-09-11 20:32:25 +0200 |
commit | 8670f4911b742c87210b97150197080310b5ab58 (patch) | |
tree | 567e23f6feaa9ec93bfac7d7594bc9eb65487d79 | |
parent | e7d404340628ef2ca6170744a7df33e20cd0fc1a (diff) | |
download | Nim-8670f4911b742c87210b97150197080310b5ab58.tar.gz |
Fix semantic pass with borrowed magic procs (#8945)
Reported by pqflx3 on the forum.
-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 |