mirror of
https://github.com/golang/go
synced 2024-11-22 02:54:39 -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 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) }
|
||||
|
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:
|
||||
t.Go = c.bool
|
||||
t.Align = c.ptrSize
|
||||
t.Align = 1
|
||||
|
||||
case *dwarf.CharType:
|
||||
if t.Size != 1 {
|
||||
|
Loading…
Reference in New Issue
Block a user