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