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