mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-09 06:23:25 +00:00
* fix #19435; openArray wronyly registers typebounds * add testcase * don't create TypeBoundOps for tyOpenArray, tyVarargs
This commit is contained in:
@@ -1054,7 +1054,7 @@ proc track(tracked: PEffects, n: PNode) =
|
||||
addAsgnFact(tracked.guards, n[0], n[1])
|
||||
notNilCheck(tracked, n[1], n[0].typ)
|
||||
when false: cstringCheck(tracked, n)
|
||||
if tracked.owner.kind != skMacro:
|
||||
if tracked.owner.kind != skMacro and n[0].typ.kind notin {tyOpenArray, tyVarargs}:
|
||||
createTypeBoundOps(tracked, n[0].typ, n.info)
|
||||
if n[0].kind != nkSym or not isLocalVar(tracked, n[0].sym):
|
||||
checkForSink(tracked.config, tracked.c.idgen, tracked.owner, n[1])
|
||||
|
||||
29
tests/arc/t19435.nim
Normal file
29
tests/arc/t19435.nim
Normal file
@@ -0,0 +1,29 @@
|
||||
discard """
|
||||
matrix: "--gc:arc"
|
||||
"""
|
||||
|
||||
# bug #19435
|
||||
{.experimental: "views".}
|
||||
|
||||
type
|
||||
Bar = object
|
||||
placeholder: int
|
||||
Foo = object
|
||||
placeholder: int
|
||||
c: seq[Bar] # remove this line to make things right
|
||||
|
||||
func children*(s: var seq[Foo]): openArray[Foo] =
|
||||
s.toOpenArray(0, s.len-1)
|
||||
|
||||
proc test =
|
||||
var foos = @[Foo(), Foo()]
|
||||
|
||||
assert foos.children.len == 2
|
||||
var flag = true
|
||||
for a in foos.children:
|
||||
flag = false
|
||||
|
||||
if flag:
|
||||
doAssert false
|
||||
|
||||
test()
|
||||
Reference in New Issue
Block a user