modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/fixedbugs/issue4909a.go (about)

     1  // errorcheck
     2  
     3  // Copyright 2013 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // Issue 4909: compiler incorrectly accepts unsafe.Offsetof(t.x)
     8  // where x is a field of an embedded pointer field.
     9  
    10  package p
    11  
    12  import (
    13  	"unsafe"
    14  )
    15  
    16  type T struct {
    17  	A int
    18  	*B
    19  }
    20  
    21  func (t T) Method() {}
    22  
    23  type B struct {
    24  	X, Y int
    25  }
    26  
    27  var t T
    28  var p *T
    29  
    30  const N1 = unsafe.Offsetof(t.X)      // ERROR "indirection"
    31  const N2 = unsafe.Offsetof(p.X)      // ERROR "indirection"
    32  const N3 = unsafe.Offsetof(t.B.X)    // valid
    33  const N4 = unsafe.Offsetof(p.B.X)    // valid
    34  const N5 = unsafe.Offsetof(t.Method) // ERROR "method value"
    35  const N6 = unsafe.Offsetof(p.Method) // ERROR "method value"