In a previous question (Get object call hierarchy), I got this interesting answer:
The call stack is not there to tell you where you came from.
There is more to this than you think.
In C it is entirely possible to have a program rewrite the call stack. Indeed, that technique is the very basis of a style of exploit known as return oriented programming.
I've also written code in one language which gave you direct control over the callstack. You could pop off the function that called yours, and push some other one in its place. You could duplicate the item on the top of the call stack, so the rest of the code in the calling function would get executed twice, and a bunch of other interesting things. In fact direct manipulation of the call stack was the primary control structure provided by this language. (Challenge: can anybody Identify the language from this description?)
It did clearly show that the call stack indicates where you are going, not where you have been.