# XO0915: a raw address used after its value was released

Reported by `xo vet --cost` on std's own code (the raw functions are std internals). A value is released right after its last named use, even inside the arguments of the call that takes its address, so `f(raw.data(s), s.len())` releases `s` before `f` runs and `f` reads freed memory. The read is right while nothing reuses the block, so outputs rarely show it; a --race build on Linux reports a heap-use-after-free (gotchas/raw-address-outlives-bytes.md; the 2026-11-02 race stress found four in std). Keep the value alive past the last access.

## Example

```xo
fn put_len(d: Int, n: Int) {
  let s = "${n}"
  copy(d, raw.data(s), s.len())
}
```

## Fix

```xo
fn put_len(d: Int, n: Int) {
  let s = "${n}"
  copy(d, raw.data(s), s.len())
  raw.alive_str(s)
}
```

Run `xo explain XO0915` for this text in a terminal, or see
[section 10.6 of the specification](../../spec/core/#106-diagnostic-codes).

