Would also bork legitimate code
I've frequently written code where a 2nd level subroutine deliberately pop's off its return address when a terminating condition is met so as to return to the original caller rather than the 1st level subroutine. It avoids the need to do a condition test after every call from the 1st to the 2nd level subroutine to see if it should return. This safeguard would appear to prevent that type of method (which is reasonably common in assembler programs, perhaps not so much in high level languages).