1) The compiler gives you an error, this would be my preferred solution though I'm not aware of any language that does that.
2) These end up referring to the same variable with no error. Nim's solution.
3) These are actually different variables with no error. The common solution.
Again, I would prefer (1) but I think that (2) is a safer way of handling the situation than (3).