diff options
author | Araq <rumpf_a@web.de> | 2015-01-18 20:49:56 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2015-01-18 20:49:56 +0100 |
commit | 71d3cccb07bb824df10c5dd90493aaf16350e171 (patch) | |
tree | f5dc3922815bd4939b8c935ac51c9ed9ec549b30 | |
parent | bb3dae3a9196abbe663ffbdf6f065eba86d6c548 (diff) | |
download | Nim-71d3cccb07bb824df10c5dd90493aaf16350e171.tar.gz |
fixes #1833
-rw-r--r-- | compiler/ccgexprs.nim | 3 | ||||
-rw-r--r-- | tests/ccgbugs/twrong_tupleconv.nim | 20 |
2 files changed, 22 insertions, 1 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 2d3cf562b..90aefd7d6 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -1569,7 +1569,8 @@ proc genRangeChck(p: BProc, n: PNode, d: var TLoc, magic: string) = toRope(magic)])) proc genConv(p: BProc, e: PNode, d: var TLoc) = - if compareTypes(e.typ, e.sons[1].typ, dcEqIgnoreDistinct): + let destType = e.typ.skipTypes({tyVar, tyGenericInst}) + if compareTypes(destType, e.sons[1].typ, dcEqIgnoreDistinct): expr(p, e.sons[1], d) else: genSomeCast(p, e, d) diff --git a/tests/ccgbugs/twrong_tupleconv.nim b/tests/ccgbugs/twrong_tupleconv.nim new file mode 100644 index 000000000..68413e96e --- /dev/null +++ b/tests/ccgbugs/twrong_tupleconv.nim @@ -0,0 +1,20 @@ +# bug #1833 +iterator myitems*[T](a: var seq[T]): var T {.inline.} = + ## iterates over each item of `a` so that you can modify the yielded value. + var i = 0 + let L = len(a) + while i < L: + yield a[i] + inc(i) + assert(len(a) == L, "seq modified while iterating over it") + +# Works fine +var xs = @[1,2,3] +for x in myitems(xs): + inc x + +# Tuples don't work +var ys = @[(1,"a"),(2,"b"),(3,"c")] +for y in myitems(ys): + inc y[0] + |