]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cgo: fix alignment of bool.
authorVladimir Nikishenko <vova616@gmail.com>
Wed, 21 Nov 2012 21:04:38 +0000 (13:04 -0800)
committerIan Lance Taylor <iant@golang.org>
Wed, 21 Nov 2012 21:04:38 +0000 (13:04 -0800)
Fixes #4417.

R=golang-dev, iant, minux.ma, bradfitz
CC=golang-dev, vova616
https://golang.org/cl/6782097

misc/cgo/test/cgo_test.go
misc/cgo/test/issue4417.go [new file with mode: 0644]
src/cmd/cgo/gcc.go

index a423195f48e55fd7b5ab8a295586ca7a20b39039..4634b851c2754fbb0398953b057eacf3e81b6583 100644 (file)
@@ -32,5 +32,6 @@ func TestLibgcc(t *testing.T)              { testLibgcc(t) }
 func Test1635(t *testing.T)                { test1635(t) }
 func TestPrintf(t *testing.T)              { testPrintf(t) }
 func Test4029(t *testing.T)                { test4029(t) }
+func TestBoolAlign(t *testing.T)           { testBoolAlign(t) }
 
 func BenchmarkCgoCall(b *testing.B) { benchCgoCall(b) }
diff --git a/misc/cgo/test/issue4417.go b/misc/cgo/test/issue4417.go
new file mode 100644 (file)
index 0000000..99a9f57
--- /dev/null
@@ -0,0 +1,44 @@
+// run
+
+// Copyright 2012 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.
+
+// Issue 4417: cmd/cgo: bool alignment/padding issue.
+// bool alignment is wrong and causing wrong arguments when calling functions.
+//
+
+package cgotest
+
+/*
+#include <stdbool.h>
+
+static int c_bool(bool a, bool b, int c, bool d, bool e)  {
+   return c;
+}
+*/
+import "C"
+import "testing"
+
+func testBoolAlign(t *testing.T) {
+       b := C.c_bool(true, true, 10, true, false)
+       if b != 10 {
+               t.Fatalf("found %d expected 10\n", b)
+       }
+       b = C.c_bool(true, true, 5, true, true)
+       if b != 5 {
+               t.Fatalf("found %d expected 5\n", b)
+       }
+       b = C.c_bool(true, true, 3, true, false)
+       if b != 3 {
+               t.Fatalf("found %d expected 3\n", b)
+       }
+       b = C.c_bool(false, false, 1, true, false)
+       if b != 1 {
+               t.Fatalf("found %d expected 1\n", b)
+       }
+       b = C.c_bool(false, true, 200, true, false)
+       if b != 200 {
+               t.Fatalf("found %d expected 200\n", b)
+       }
+}
index 191751c40ef2a580cc5a54300e3230334f20b145..a974475b8aca515a004398abcc7f599e2edf4533 100644 (file)
@@ -1078,7 +1078,7 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type {
 
        case *dwarf.BoolType:
                t.Go = c.bool
-               t.Align = c.ptrSize
+               t.Align = 1
 
        case *dwarf.CharType:
                if t.Size != 1 {