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 10package p 11 12import ( 13 "unsafe" 14) 15 16type T struct { 17 A int 18 *B 19} 20 21func (t T) Method() {} 22 23type B struct { 24 X, Y int 25} 26 27var t T 28var p *T 29 30const N1 = unsafe.Offsetof(t.X) // ERROR "indirection|field X is embedded via a pointer in T" 31const N2 = unsafe.Offsetof(p.X) // ERROR "indirection|field X is embedded via a pointer in T" 32const N3 = unsafe.Offsetof(t.B.X) // valid 33const N4 = unsafe.Offsetof(p.B.X) // valid 34const N5 = unsafe.Offsetof(t.Method) // ERROR "method value" 35const N6 = unsafe.Offsetof(p.Method) // ERROR "method value" 36