Sometimes I wonder how much better off we'd be with something exactly like x86, but with a stack that grows upwards.
void dangerous() {
char buf[10];
gets(buf); // the return in gets could be redirected
}what you REALLY should wonder is, something like x86, but with code pointers stored in a separate address space.