| // Copyright 2021 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package typeparams |
| |
| import "unsafe" |
| |
| func GenericShiftTest[DifferentSize ~int8|int16|int64, SameSize int8|byte]() { |
| var d DifferentSize |
| _ = d << 7 |
| _ = d << 8 // want "d .may be 8 bits. too small for shift of 8" |
| _ = d << 15 // want "d .may be 8 bits. too small for shift of 15" |
| _ = (d + 1) << 8 // want ".d . 1. .may be 8 bits. too small for shift of 8" |
| _ = (d + 1) << 16 // want ".d . 1. .may be 8 bits. too small for shift of 16" |
| _ = d << (7 + 1) // want "d .may be 8 bits. too small for shift of 8" |
| _ = d >> 8 // want "d .may be 8 bits. too small for shift of 8" |
| d <<= 8 // want "d .may be 8 bits. too small for shift of 8" |
| d >>= 8 // want "d .may be 8 bits. too small for shift of 8" |
| |
| // go/types does not compute constant sizes for type parameters, so we do not |
| // report a diagnostic here. |
| _ = d << (8 * DifferentSize(unsafe.Sizeof(d))) |
| |
| var s SameSize |
| _ = s << 7 |
| _ = s << 8 // want "s .8 bits. too small for shift of 8" |
| _ = s << (7 + 1) // want "s .8 bits. too small for shift of 8" |
| _ = s >> 8 // want "s .8 bits. too small for shift of 8" |
| s <<= 8 // want "s .8 bits. too small for shift of 8" |
| s >>= 8 // want "s .8 bits. too small for shift of 8" |
| } |