Explicit destroy hooks resolve to assignment inside .nodestroy procs
### Description

Instead of producing a eqdup function, the C code contains `Result[(i - 0)] = y_p0;` which causes double free.

```nim
proc arrayWith2[T](y: T, size: static int): array[size, T] {.noinit, nodestroy, raises: [].} =
  ## Creates a new array filled with `y`.
  for i in 0..size-1:
    when defined(nimHasDup):
      result[i] = `=dup`(y)
    else:
      wasMoved(result[i])
      `=copy`(result[i], y)

proc useArray(x: seq[int]) =
  var a = arrayWith2(x, 2)

proc main =
  let x = newSeq[int](100)
  for i in 0..5:
    useArray(x)

main()
```

### Nim Version

Nim Compiler Version 2.3.1 [Linux: amd64]
Compiled at 2025-01-19
Copyright (c) 2006-2025 by Andreas Rumpf

git hash: 45ca7af5b95ea60ac05c1283e67eecb0cb93cc84
active boot switches: -d:release

### Current Output

```text
free(): double free detected in tcache 2
SIGABRT: Abnormal termination.
```

### Expected Output

```text

```

### Known Workarounds

_No response_

### Additional Information

_No response_