ARC hooks missing when sinking generic typeclass
### Description

One would expect this code to have a `dup` or `copy` inserted by arc, but it doesn't
```nim
type
  Head[T] = object
    mem: pointer

proc `=destroy`[T](x: Head[T])=discard

proc update(h: var Head)=discard
proc digest(h: sink Head) = discard

proc main()=
  var h = Head[int]()
  h.update()
  h.digest()  # sink h
  h.update()  # use after sink

main()
```

changing the signature of `digest` to `digest[T](h: sink Head[T])` and the hooks are there.

### Nim Version

Nim Compiler Version 2.1.9 [Linux: amd64]
Compiled at 2024-07-20
Copyright (c) 2006-2024 by Andreas Rumpf

git hash: 9ca646acd4565a72a7115777d58b115787b19b0c
active boot switches: -d:release

### Current Output

```text
expandArc for example:

var h
h = Head[int]()
update(h)
update(h)
digest(h)
update(h)
`=destroy`(h)
-- end of expandArc ------------------------
```


### Expected Output

```text
expandArc with `T` parameter in `sink` proc:

var
  h
  :tmpD
h = Head[int]()
update(h)
update(h)
digest:
  :tmpD = `=dup`(h)
  :tmpD
update(h)
`=destroy`(h)
-- end of expandArc ------------------------
```


### Possible Solution

_No response_

### Additional Information

potential assertable snippet:
```nim
type
  Head[T] = object
    mem: pointer
    wasc: bool

proc `=destroy`[T](x: Head[T])=discard
proc `=copy`[T](x: var Head[T], y: Head[T])=
  x.wasc = true
proc `=dup`[T](x: Head[T]): Head[T]=
  result.wasc = true


proc update(h: var Head)=discard
proc digest(h: sink Head) =
  assert h.wasc

proc main()=
  var h = Head[int](wasc:false)
  h.update()
  h.update()
  h.digest()  # sink h
  h.update()  # use after sink

main()
```