fixes #6724
This commit is contained in:
parent
e96189c9c3
commit
d072229975
2 changed files with 36 additions and 3 deletions
|
|
@ -365,7 +365,7 @@ proc transformAddrDeref(c: PTransf, n: PNode, a, b: TNodeKind): PTransNode =
|
||||||
# addr ( nkConv ( deref ( x ) ) ) --> nkConv(x)
|
# addr ( nkConv ( deref ( x ) ) ) --> nkConv(x)
|
||||||
n.sons[0].sons[0] = m.sons[0]
|
n.sons[0].sons[0] = m.sons[0]
|
||||||
result = PTransNode(n.sons[0])
|
result = PTransNode(n.sons[0])
|
||||||
if n.typ.kind != tyOpenArray:
|
if n.typ.skipTypes(abstractVar).kind != tyOpenArray:
|
||||||
PNode(result).typ = n.typ
|
PNode(result).typ = n.typ
|
||||||
of nkHiddenStdConv, nkHiddenSubConv, nkConv:
|
of nkHiddenStdConv, nkHiddenSubConv, nkConv:
|
||||||
var m = n.sons[0].sons[1]
|
var m = n.sons[0].sons[1]
|
||||||
|
|
@ -373,13 +373,13 @@ proc transformAddrDeref(c: PTransf, n: PNode, a, b: TNodeKind): PTransNode =
|
||||||
# addr ( nkConv ( deref ( x ) ) ) --> nkConv(x)
|
# addr ( nkConv ( deref ( x ) ) ) --> nkConv(x)
|
||||||
n.sons[0].sons[1] = m.sons[0]
|
n.sons[0].sons[1] = m.sons[0]
|
||||||
result = PTransNode(n.sons[0])
|
result = PTransNode(n.sons[0])
|
||||||
if n.typ.kind != tyOpenArray:
|
if n.typ.skipTypes(abstractVar).kind != tyOpenArray:
|
||||||
PNode(result).typ = n.typ
|
PNode(result).typ = n.typ
|
||||||
else:
|
else:
|
||||||
if n.sons[0].kind == a or n.sons[0].kind == b:
|
if n.sons[0].kind == a or n.sons[0].kind == b:
|
||||||
# addr ( deref ( x )) --> x
|
# addr ( deref ( x )) --> x
|
||||||
result = PTransNode(n.sons[0].sons[0])
|
result = PTransNode(n.sons[0].sons[0])
|
||||||
if n.typ.kind != tyOpenArray:
|
if n.typ.skipTypes(abstractVar).kind != tyOpenArray:
|
||||||
PNode(result).typ = n.typ
|
PNode(result).typ = n.typ
|
||||||
|
|
||||||
proc generateThunk(prc: PNode, dest: PType): PNode =
|
proc generateThunk(prc: PNode, dest: PType): PNode =
|
||||||
|
|
|
||||||
33
tests/ccgbugs/trefseqsort.nim
Normal file
33
tests/ccgbugs/trefseqsort.nim
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
discard """
|
||||||
|
output: '''@[0, 4, 9, 1, 3, 2]
|
||||||
|
@[0, 1, 2, 3, 9]'''
|
||||||
|
"""
|
||||||
|
# bug #6724
|
||||||
|
import algorithm
|
||||||
|
|
||||||
|
type
|
||||||
|
Bar = object
|
||||||
|
bar: ref seq[int]
|
||||||
|
Foo = ref Bar
|
||||||
|
|
||||||
|
proc test(x: ref Foo) =
|
||||||
|
x.bar[].del(1)
|
||||||
|
x.bar[].sort(cmp)
|
||||||
|
|
||||||
|
proc main() =
|
||||||
|
var foo: ref Foo
|
||||||
|
new(foo)
|
||||||
|
|
||||||
|
var s = @[0, 4, 9, 1, 3, 2]
|
||||||
|
|
||||||
|
var sr: ref seq[int]
|
||||||
|
new(sr)
|
||||||
|
sr[] = s
|
||||||
|
|
||||||
|
foo[] = Foo(bar: sr)
|
||||||
|
echo($foo.bar[])
|
||||||
|
|
||||||
|
test(foo)
|
||||||
|
echo($foo.bar[])
|
||||||
|
|
||||||
|
main()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue