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