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:
parent
42c8904fe1
commit
dd01e9281d
@ -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) }
|
||||||
|
44
misc/cgo/test/issue4417.go
Normal file
44
misc/cgo/test/issue4417.go
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user