That said, I haven't given the problem enough thought to figure out if there is a solution in that case but, if there is one, it means more work for the compiler, consequently slower compilation.
The idea would be in creation of
the static analyzer and leaving compiler fast and compatible.
The analyzer would depend on FPC source to get AST and conduct its analysis project-wise.
Modern languages maintain official analyzers that can verify code while typing, in current context. Compiler invocations become less often.
Analyzer's source code is meant to be approachable for everyone who grasped several concepts.
Analyzer can do
escape analysis in functions and practically become "static garbage collector" providing guarantees closer to Rust level.
It could generate a human readable statistical report about memory safety of a project.
"Sound Nil Safety" by itself is a huge feature in a language, but it requires small addition to lexer and parser for "?", "!", "late".
And compatibility requirement with commercial Delphi may be off-putting for some probable contributors.
Well, static analyzer could validate code for null safety of existing unchanged syntax by applying rules of the usual defensive programming style - every reference can be nil. Validating all blocks that use pointers/references, etc.