1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# build with nim c -r  --passC:"-fsanitize=address,undefined" --passL:"-fsanitize=address,undefined" 
# expected: ASan reports heap-use-after-free

type
  MData = ref object
    tag: int

let nilD = MData(tag: 1)

var slots: seq[MData]
slots.grow(1, nilD)       # `grow` move-fills: this slot does not retain `nilD`.
slots[0] = MData(tag: 2)  # Frees the shared value.
echo nilD.tag             # Reads the freed shared value.

# $ nim --version
# Nim Compiler Version 2.2.10 [Linux: amd64]
# Compiled at 2026-04-24
# Copyright (c) 2006-2026 by Andreas Rumpf
# 
# active boot switches: -d:release