// A shift whose left operand is an untyped constant takes its type from the // context, not from the count. `r = 1 << m` with r uint64 is a 64-bit shift; // stage4 typed it from the uint32 count and shifted at 32 bits, so 1<<52 came // out as 1<<20 (and the assignment was rejected outright as uint32 to uint64). // strconv's atofHex has exactly this shape (mantissa = 1 << flt.mantbits, // mantbits 52 for float64). package main func wide(m uint32) (r uint64) { r = 1 << m return r } func narrow(m uint32) (r int32) { r = 1 << m return r } func mixed(m uint32, bias int32) (r int32) { r = 1<