People will get a warning about unnecessary unsafe { foo() }, and that will break in local builds only if the crate has the footgun of #[deny(warnings)].
It won't break in dependencies, because of the cap lints mechanism.
Something useful to know is that you can assign a fn() to an unsafe fn() variable, so removing the unsafe modifier won't break code that passes foo around as a function pointer.