honnef.co/go/tools@v0.4.7/staticcheck/testdata/src/example.com/CheckStaticBitShift/CheckStaticBitShift.go (about)

     1  package pkg
     2  
     3  // Partially copied from go vet's test suite.
     4  
     5  // Copyright 2014 The Go Authors. All rights reserved.
     6  // Use of this source code is governed by a BSD-style
     7  // license that can be found in the LICENSE-THIRD-PARTY file.
     8  
     9  type Number int8
    10  
    11  func fn() {
    12  	var n8 Number
    13  	n8 <<= 8 //@ diag(`will always clear it`)
    14  
    15  	var i8 int8
    16  	_ = i8 << 7
    17  	_ = (i8 + 1) << 8 //@ diag(`will always clear it`)
    18  	_ = i8 << (7 + 1) //@ diag(`will always clear it`)
    19  	_ = i8 >> 8       //@ diag(`will always clear it`)
    20  	i8 <<= 8          //@ diag(`will always clear it`)
    21  	i8 >>= 8          //@ diag(`will always clear it`)
    22  	i8 <<= 12         //@ diag(`will always clear it`)
    23  
    24  	var i16 int16
    25  	_ = i16 << 15
    26  	_ = i16 << 16 //@ diag(`will always clear it`)
    27  	_ = i16 >> 16 //@ diag(`will always clear it`)
    28  	i16 <<= 16    //@ diag(`will always clear it`)
    29  	i16 >>= 16    //@ diag(`will always clear it`)
    30  	i16 <<= 18    //@ diag(`will always clear it`)
    31  
    32  	var i32 int32
    33  	_ = i32 << 31
    34  	_ = i32 << 32 //@ diag(`will always clear it`)
    35  	_ = i32 >> 32 //@ diag(`will always clear it`)
    36  	i32 <<= 32    //@ diag(`will always clear it`)
    37  	i32 >>= 32    //@ diag(`will always clear it`)
    38  	i32 <<= 40    //@ diag(`will always clear it`)
    39  
    40  	var i64 int64
    41  	_ = i64 << 63
    42  	_ = i64 << 64 //@ diag(`will always clear it`)
    43  	_ = i64 >> 64 //@ diag(`will always clear it`)
    44  	i64 <<= 64    //@ diag(`will always clear it`)
    45  	i64 >>= 64    //@ diag(`will always clear it`)
    46  	i64 <<= 70    //@ diag(`will always clear it`)
    47  
    48  	var u8 uint8
    49  	_ = u8 << 7
    50  	_ = u8 << 8 //@ diag(`will always clear it`)
    51  	_ = u8 >> 8 //@ diag(`will always clear it`)
    52  	u8 <<= 8    //@ diag(`will always clear it`)
    53  	u8 >>= 8    //@ diag(`will always clear it`)
    54  	u8 <<= 12   //@ diag(`will always clear it`)
    55  
    56  	var u16 uint16
    57  	_ = u16 << 15
    58  	_ = u16 << 16 //@ diag(`will always clear it`)
    59  	_ = u16 >> 16 //@ diag(`will always clear it`)
    60  	u16 <<= 16    //@ diag(`will always clear it`)
    61  	u16 >>= 16    //@ diag(`will always clear it`)
    62  	u16 <<= 18    //@ diag(`will always clear it`)
    63  
    64  	var u32 uint32
    65  	_ = u32 << 31
    66  	_ = u32 << 32 //@ diag(`will always clear it`)
    67  	_ = u32 >> 32 //@ diag(`will always clear it`)
    68  	u32 <<= 32    //@ diag(`will always clear it`)
    69  	u32 >>= 32    //@ diag(`will always clear it`)
    70  	u32 <<= 40    //@ diag(`will always clear it`)
    71  
    72  	var u64 uint64
    73  	_ = u64 << 63
    74  	_ = u64 << 64 //@ diag(`will always clear it`)
    75  	_ = u64 >> 64 //@ diag(`will always clear it`)
    76  	u64 <<= 64    //@ diag(`will always clear it`)
    77  	u64 >>= 64    //@ diag(`will always clear it`)
    78  	u64 <<= 70    //@ diag(`will always clear it`)
    79  	_ = u64 << u64
    80  }
    81  
    82  func fn1() {
    83  	var ui uint
    84  	_ = ui << 64
    85  	_ = ui >> 64
    86  	ui <<= 64
    87  	ui >>= 64
    88  
    89  	var uptr uintptr
    90  	_ = uptr << 64
    91  	_ = uptr >> 64
    92  	uptr <<= 64
    93  	uptr >>= 64
    94  
    95  	var i int
    96  	_ = i << 64
    97  	_ = i >> 64
    98  	i <<= 64
    99  	i >>= 64
   100  }