I see some discussion about Fil-C online, but what kinda gets lost among the performance/memory overhead, limited platform support, and runtime-vs-compiletime detection is that its only memory-safe for a very weak form of memory. That is, as far as I can tell it
- detects (most) out of bounds accesses that aren't legal in C (invisicaps)
- makes use-after-frees that aren't legal in C behave as if the memory hasn't been freed yet (garbage collection)
- zero-initialize allocations & define some normally UB operations, e.g. legalizing out-of-bounds pointer arithmetic
For one, this means it doesn't fully deal with unsynchronized accesses or reads from the wrong union field, even when they are illegal in C and would usually be considered memory safety violations.
But the other thing is that C is not designed for memory safety, and so it allows lots of accesses because it doesn't give you the tools to declare what is valid or not.
1/2