Source file test/fixedbugs/issue4909a.go
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|field X is embedded via a pointer in T" 31 const N2 = unsafe.Offsetof(p.X) // ERROR "indirection|field X is embedded via a pointer in T" 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" 36