https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102552
--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- No, it's related to fact that: bool parse_optimize_options (tree args, bool attr_p) { ... /* Build up argv vector. Just in case the string is stored away, use garbage collected strings. */ vec_safe_truncate (optimize_args, 0); vec_safe_push (optimize_args, (const char *) NULL); As seen we push NULL pointer as the first vector element. Why do we do that?