// errorcheck

// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Issue 4909: compiler incorrectly accepts unsafe.Offsetof(t.x)
// where x is a field of an embedded pointer field.

package p

import (
	"unsafe"
)

type T struct {
	A int
	*B
}

func (t T) Method() {}

type B struct {
	X, Y int
}

var t T
var p *T

const N1 = unsafe.Offsetof(t.X)      // ERROR "indirection"
const N2 = unsafe.Offsetof(p.X)      // ERROR "indirection"
const N3 = unsafe.Offsetof(t.B.X)    // valid
const N4 = unsafe.Offsetof(p.B.X)    // valid
const N5 = unsafe.Offsetof(t.Method) // ERROR "method value"
const N6 = unsafe.Offsetof(p.Method) // ERROR "method value"
