There are two main reasons for disabling optimisations with -O0 :
1. For testing the assembler and the compiler itself.
2. Experimental software: coredumps and stack backtrace are obvoiusly different between optimised and non-optimised assembly (and the differences are sometimes really huge).
Since systemd uses ancient ways to handle errors and because it is complex, then often the only way to tell what caused the crash in particular situation is to read the coredump. Non-optimised code dumps core files which are easier to read.
Trapv: In short, it generates SIGABRT on overflows and is a compiler-level version of assert() - which just kills the problematic process. Due to a significant overhead that is produced by additional code injected by the compiler, this option is used mainly in experimental code to quickly discover programming errors. However, in production (tested) code this is normally removed - mainly due to performance issues.
And thus, for me it's obvious that the autors are "recommending" using non-optimised code which is just crashing with coredump on any trivial error, only because they have completely no idea what may happen - because it's just experimental and untested solution.