forked from akaros/go-akaros
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmd/cgo: for -godefs, promote first field of anonymous union
Update golang#6677 When a struct contains an anonymous union, use the type and name of the first field in the union. This should make the glibc <sys/resource.h> file work; in that file struct rusage has fields like __extension__ union { long int ru_maxrss; __syscall_slong_t __ru_maxrss_word; }; in which the field that matters is ru_maxrss and __ru_maxrss_word just exists to advance to the next field on systems where the kernel uses long long fields but userspace expects long fields. LGTM=mikioh.mikioh R=golang-codereviews, mikioh.mikioh CC=golang-codereviews https://golang.org/cl/106260044
- Loading branch information
1 parent
88a5ef0
commit 138caf7
Showing
4 changed files
with
79 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
// 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. | ||
// | ||
// +build ignore | ||
|
||
package main | ||
|
||
// This file tests that when cgo -godefs sees a struct with a field | ||
// that is an anonymous union, the first field in the union is | ||
// promoted to become a field of the struct. See issue 6677 for | ||
// background. | ||
|
||
/* | ||
typedef struct { | ||
union { | ||
long l; | ||
int c; | ||
}; | ||
} t; | ||
*/ | ||
import "C" | ||
|
||
// Input for cgo -godefs. | ||
|
||
type T C.t |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
// 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 | ||
|
||
// Test that the struct field in anonunion.go was promoted. | ||
var v1 T | ||
var v2 = v1.L | ||
|
||
func main() { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# 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. | ||
|
||
# We are testing cgo -godefs, which translates Go files that use | ||
# import "C" into Go files with Go definitions of types defined in the | ||
# import "C" block. Add more tests here. | ||
FILE_PREFIXES="anonunion" | ||
|
||
RM= | ||
for FP in $FILE_PREFIXES | ||
do | ||
go tool cgo -godefs ${FP}.go > ${FP}_defs.go | ||
RM="${RM} ${FP}_defs.go" | ||
done | ||
|
||
go build . && ./testgodefs | ||
EXIT=$? | ||
rm -rf _obj testgodefs ${RM} | ||
exit $EXIT |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters