Open griesemer opened 6 years ago
Change https://golang.org/cl/65370 mentions this issue: go/types: don't accept incorrect shift expression arguments
I think the current error is fine.
"If the left operand of a non-constant shift expression is an untyped constant, it is first converted to the type it would assume if the shift expression were replaced by its left operand alone."
If we replace the shift expression, we get 1 + 1.0
, which cannot be converted to string. Ergo, we can't convert the original expression to string either.
Also, we do allow shifting of untyped float constants (e.g., int(1.0 << s)
), so I think the proposed error message (cannot shift 1 (untyped float value)
) would be misleading. And the same expression is valid in some other contexts (e.g., int(1<<s + 1.0)
), so I think mentioning the string conversion aspect is important.
Type-checking the program
produces the error:
But the correct error would be:
See also the TODO in go/types/conversions.go.