If you are unlucky, it's going to execute whatever user data a malicious attacker added by carefully crafted input.
(Yes, these days that's harder, but you can still do a more complicated version of the same attacks. See return oriented programming.)
It could. If it detect that a code path cannot be taken without causing overflow, it will assume this code path cannot be taken and will optimise it by removing it. No need even to return from the function. If you reach this code anyway, it can run whatever functions is on the binary after it. If you're unlucky that's a function to remove temporary files which would be ran with bogus arguments.