blob: aefe2d645571620f7f1aae72cd2125d5ec61997a [file] [log] [blame]
Rémy Oudompheng2d3216f2013-04-05 21:24:07 +02001// 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"
31const N2 = unsafe.Offsetof(p.X) // ERROR "indirection"
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"