aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cgo/cgo.go6
-rw-r--r--testdata/cgo/main.go4
2 files changed, 8 insertions, 2 deletions
diff --git a/cgo/cgo.go b/cgo/cgo.go
index 67979230c..850007967 100644
--- a/cgo/cgo.go
+++ b/cgo/cgo.go
@@ -88,6 +88,7 @@ var cgoAliases = map[string]string{
"C.uintptr_t": "uintptr",
"C.float": "float32",
"C.double": "float64",
+ "C._Bool": "bool",
}
// builtinAliases are handled specially because they only exist on the Go side
@@ -311,10 +312,11 @@ func Process(files []*ast.File, dir, importPath string, fset *token.FileSet, cfl
// Process CGo imports for each file.
for i, f := range files {
cf := p.newCGoFile(f, i)
- // Float and double are aliased, meaning that C.float is the same thing
- // as float32 in Go.
+ // These types are aliased with the corresponding types in C. For
+ // example, float in C is always float32 in Go.
cf.names["float"] = clangCursor{}
cf.names["double"] = clangCursor{}
+ cf.names["_Bool"] = clangCursor{}
// Now read all the names (identifies) that C defines in the header
// snippet.
cf.readNames(p.cgoHeaders[i], cflagsForCGo, filepath.Base(fset.File(f.Pos()).Name()), func(names map[string]clangCursor) {
diff --git a/testdata/cgo/main.go b/testdata/cgo/main.go
index 4555c922f..1b810a565 100644
--- a/testdata/cgo/main.go
+++ b/testdata/cgo/main.go
@@ -9,6 +9,7 @@ int mul(int, int);
#include <string.h>
#cgo CFLAGS: -DSOME_CONSTANT=17
#define someDefine -5 + 2 * 7
+bool someBool;
*/
import "C"
@@ -56,6 +57,9 @@ func main() {
var goInt8 int8 = 5
var _ C.int8_t = goInt8
+ var _ bool = C.someBool
+ var _ C._Bool = C.someBool
+
// more globals
println("bool:", C.globalBool, C.globalBool2 == true)
println("float:", C.globalFloat)