aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2016-02-23 16:11:46 -0800
committerIan Lance Taylor <iant@golang.org>2016-02-27 22:51:51 +0000
commit71cc445cf92dd3014e8b382809ed1b9c077e7973 (patch)
tree7df3bdc3968fdb7dd61c9c9a18380601859fd1ca /src
parent922ce58de0181c114c09e6fbd6ab28f1d477898d (diff)
downloadgo-71cc445cf92dd3014e8b382809ed1b9c077e7973.tar.xz
cmd/cgo: recognize known C typedefs as types
Fixes #14483. Change-Id: I0cddfe27fd8d00ba85659d0b618410e39ebf45cb Reviewed-on: https://go-review.googlesource.com/19860 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/cgo/gcc.go11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go
index 5bfdef785c..fe9af1769d 100644
--- a/src/cmd/cgo/gcc.go
+++ b/src/cmd/cgo/gcc.go
@@ -819,14 +819,17 @@ func (p *Package) hasSideEffects(f *File, x ast.Expr) bool {
func (p *Package) isType(t ast.Expr) bool {
switch t := t.(type) {
case *ast.SelectorExpr:
- if t.Sel.Name != "Pointer" {
- return false
- }
id, ok := t.X.(*ast.Ident)
if !ok {
return false
}
- return id.Name == "unsafe"
+ if id.Name == "unsafe" && t.Sel.Name == "Pointer" {
+ return true
+ }
+ if id.Name == "C" && typedef["_Ctype_"+t.Sel.Name] != nil {
+ return true
+ }
+ return false
case *ast.Ident:
// TODO: This ignores shadowing.
switch t.Name {