| // 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|field X is embedded via a pointer in T" | |
| const N2 = unsafe.Offsetof(p.X) // ERROR "indirection|field X is embedded via a pointer in T" | |
| 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" |