What happens when you mutate the target of a pointer to the same memory as the target of an "immutable" reference (eg. function parameters and union switches)?
At the calling scope, the parameter passed is not immutable. You can pass a pointer too, if you want.
There's also this pattern:
name := name
which redeclares name in the current scope and shadows the name that exists in the outer scope call :: proc(b: int) {
fmt.println(b)
// c := &b // illegal!
// b = 10 // illegal!
b := b
b = 10;
fmt.println(b)
}