mirror of
https://github.com/golang/go
synced 2024-11-23 04:00:03 -07:00
eaa97fbf20
The cgo tool would sometimes emit a bitfield at an offset that did not correspond to the C offset, such as for the example in the new test. Change-Id: I61b2ca10ee44a42f81c13ed12865f2060168fed5 Reviewed-on: https://go-review.googlesource.com/c/go/+/252378 Trust: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org>
55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
// Copyright 2014 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.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"reflect"
|
|
)
|
|
|
|
// Test that the struct field in anonunion.go was promoted.
|
|
var v1 T
|
|
var v2 = v1.L
|
|
|
|
// Test that P, Q, and R all point to byte.
|
|
var v3 = Issue8478{P: (*byte)(nil), Q: (**byte)(nil), R: (***byte)(nil)}
|
|
|
|
// Test that N, A and B are fully defined
|
|
var v4 = N{}
|
|
var v5 = A{}
|
|
var v6 = B{}
|
|
|
|
// Test that S is fully defined
|
|
var v7 = S{}
|
|
|
|
// Test that #define'd type is fully defined
|
|
var _ = issue38649{X: 0}
|
|
|
|
func main() {
|
|
pass := true
|
|
|
|
// The Go translation of bitfields should not have any of the
|
|
// bitfield types. The order in which bitfields are laid out
|
|
// in memory is implementation defined, so we can't easily
|
|
// know how a bitfield should correspond to a Go type, even if
|
|
// it appears to be aligned correctly.
|
|
bitfieldType := reflect.TypeOf(bitfields{})
|
|
check := func(name string) {
|
|
_, ok := bitfieldType.FieldByName(name)
|
|
if ok {
|
|
fmt.Fprintf(os.Stderr, "found unexpected bitfields field %s\n", name)
|
|
pass = false
|
|
}
|
|
}
|
|
check("Short1")
|
|
check("Short2")
|
|
check("Short3")
|
|
|
|
if !pass {
|
|
os.Exit(1)
|
|
}
|
|
}
|