Does the type system help out in any way with this? I know linear types can be used to enforce memory management, but IIRC (I haven't looked recently) Clay's type system was more oriented towards generics than this sort of strictness.
You're correct; Clay's type system doesn't help much with memory safety. It's flexible enough to express RAII-based ownership semantics like C++, so you can manage dynamic memory with reference counted, uniquely-owned, or other policy-enforcing pointer objects, but also like C++, the language doesn't prevent you from taking nonowning references to arbitrary data behind the type system's back and using those references after the owning object has freed the data.