summary refs log blame commit diff stats
path: root/tests/parallel/tmissing_deepcopy.nim
blob: 53481e4df08c7c2d488da9448de400e2e345d857 (plain) (tree)







































                                                                       
discard """
  ccodeCheck: "\\i @'deepCopy(' .*"
"""

# bug #2286

import threadPool

type
  Person = ref object
    name: string
    friend: Person

var
  people: seq[Person] = @[]

proc newPerson(name:string): Person =
  result.new()
  result.name = name

proc greet(p:Person) =
  p.friend.name &= "-MUT" # this line crashes the program
  echo "Person {",
    " name:", p.name, "(", cast[int](addr p.name),"),",
    " friend:", p.friend.name, "(", cast[int](addr p.friend.name),") }"

proc setup =
  for i in 0 .. <20:
    people.add newPerson("Person" & $(i + 1))
  for i in 0 .. <20:
    people[i].friend = people[19-i]

proc update =
  parallel:
    for i in 0 .. people.high:
      spawn people[i].greet()

when isMainModule:
  setup()
  update()