| // Copyright 2017 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. | |
| package cgotest | |
| // Issue 21809. Compile C `typedef` to go type aliases. | |
| // typedef long MySigned_t; | |
| // /* tests alias-to-alias */ | |
| // typedef MySigned_t MySigned2_t; | |
| // | |
| // long takes_long(long x) { return x * x; } | |
| // MySigned_t takes_typedef(MySigned_t x) { return x * x; } | |
| import "C" | |
| import "testing" | |
| func test21809(t *testing.T) { | |
| longVar := C.long(3) | |
| typedefVar := C.MySigned_t(4) | |
| typedefTypedefVar := C.MySigned2_t(5) | |
| // all three should be considered identical to `long` | |
| if ret := C.takes_long(longVar); ret != 9 { | |
| t.Errorf("got %v but expected %v", ret, 9) | |
| } | |
| if ret := C.takes_long(typedefVar); ret != 16 { | |
| t.Errorf("got %v but expected %v", ret, 16) | |
| } | |
| if ret := C.takes_long(typedefTypedefVar); ret != 25 { | |
| t.Errorf("got %v but expected %v", ret, 25) | |
| } | |
| // They should also be identical to the typedef'd type | |
| if ret := C.takes_typedef(longVar); ret != 9 { | |
| t.Errorf("got %v but expected %v", ret, 9) | |
| } | |
| if ret := C.takes_typedef(typedefVar); ret != 16 { | |
| t.Errorf("got %v but expected %v", ret, 16) | |
| } | |
| if ret := C.takes_typedef(typedefTypedefVar); ret != 25 { | |
| t.Errorf("got %v but expected %v", ret, 25) | |
| } | |
| } |