1
0
mirror of https://github.com/golang/go synced 2024-11-22 08:24:41 -07:00

cmd/cgo: fix alignment of bool.

Fixes #4417.

R=golang-dev, iant, minux.ma, bradfitz
CC=golang-dev, vova616
https://golang.org/cl/6782097
This commit is contained in:
Vladimir Nikishenko 2012-11-21 13:04:38 -08:00 committed by Ian Lance Taylor
parent 42c8904fe1
commit dd01e9281d
3 changed files with 46 additions and 1 deletions

View File

@ -32,5 +32,6 @@ func TestLibgcc(t *testing.T) { testLibgcc(t) }
func Test1635(t *testing.T) { test1635(t) } func Test1635(t *testing.T) { test1635(t) }
func TestPrintf(t *testing.T) { testPrintf(t) } func TestPrintf(t *testing.T) { testPrintf(t) }
func Test4029(t *testing.T) { test4029(t) } func Test4029(t *testing.T) { test4029(t) }
func TestBoolAlign(t *testing.T) { testBoolAlign(t) }
func BenchmarkCgoCall(b *testing.B) { benchCgoCall(b) } func BenchmarkCgoCall(b *testing.B) { benchCgoCall(b) }

View File

@ -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)
}
}

View File

@ -1078,7 +1078,7 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type {
case *dwarf.BoolType: case *dwarf.BoolType:
t.Go = c.bool t.Go = c.bool
t.Align = c.ptrSize t.Align = 1
case *dwarf.CharType: case *dwarf.CharType:
if t.Size != 1 { if t.Size != 1 {