# XO1403: call of a function not known to be real-time

A real-time function (core 6.5) may call only other real-time functions (declared `uses realtime`), the bounded prelude methods (scalar arithmetic, `len`, `get`, `contains`, `List.set`, Atomic operations), and C functions of a `use c` module. A call of a function value or of an interface method (a capability, or a method of a type parameter's constraint) is rejected: its callee is not known, so neither its allocation nor its recursion can be checked. Mark the helper `uses realtime` when it follows the rules, or move the call out of the real-time function.

## Example

```xo
fn scale(x: Float) -> Float { x * 0.5 }

fn tick(x: Float) -> Float uses realtime {
  scale(x)
}
```

## Fix

```xo
fn scale(x: Float) -> Float uses realtime { x * 0.5 }

fn tick(x: Float) -> Float uses realtime {
  scale(x)
}
```

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

