Memory Safety Check Skill
Validate Mojo ownership and borrowing rules.
When to Use
- Reviewing code for memory safety
- Debugging memory or segfault issues
- Before merging code
- Performance testing reveals corruption
Quick Reference
# Owned parameter - takes ownership
fn consume(var data: Tensor):
process(data) # data moved here
# Borrowed parameter - read-only reference
fn read_only(data: Tensor):
let value = data[0] # OK: read-only
# Mutable reference - in-place modification
fn modify(mut data: Tensor):
data[0] = 42 # Mutate in caller's variable
Workflow
- Trace ownership - Which function owns each value
- Check borrows - Are references short-lived
- Verify moves - Use
^operator for ownership transfer - Test lifetimes - Compile and run with memory checks
- Debug issues - Identify use-after-move or dangling refs
Mojo-Specific Notes
- Use
^operator ONLY when transferring ownership mut selffor mutating methods (NOTout self)out selfONLY for constructors (__init__)- List/Dict/String are non-copyable - must use
^when returning
Error Handling
| Error | Cause | Solution |
|-------|-------|----------|
| Use after move | Variable used after ownership transfer | Create copy or don't move |
| Dangling reference | Reference to local variable | Return owned value with ^ |
| Mutable aliasing | Multiple mutable refs to same data | Ensure single mutable reference |
| Type not copyable | Missing ^ on non-copyable return | Add transfer operator ^ |
References
.claude/shared/mojo-anti-patterns.md- Ownership violations section.claude/shared/mojo-guidelines.md- Parameter conventions table
Scan to join WeChat group