Those are two different bindings. That is,
fn main() {
let x = true;
{
let x = false;
}
}
Since you don't use let for assignment, it's a non-problem. And it can be useful when you're doing some computation where you want to keep intermediate variables (for debugging or clarity), and rather than think of the proper name for each, you just successively bind the same name.