1// Copyright 2018 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// Failed to resolve typedefs consistently. 6// No runtime test; just make sure it compiles. 7// In separate directory to isolate #pragma GCC diagnostic. 8 9package issue27340 10 11// We use the #pragma to avoid a compiler warning about incompatible 12// pointer types, because we generate code passing a struct ptr rather 13// than using the typedef. This warning is expected and does not break 14// a normal build. 15// We can only disable -Wincompatible-pointer-types starting with GCC 5. 16 17// #if __GNU_MAJOR__ >= 5 18// 19// #pragma GCC diagnostic ignored "-Wincompatible-pointer-types" 20// 21// typedef struct { 22// int a; 23// } issue27340Struct, *issue27340Ptr; 24// 25// static void issue27340CFunc(issue27340Ptr p) {} 26// 27// #else /* _GNU_MAJOR_ < 5 */ 28// 29// typedef struct { 30// int a; 31// } issue27340Struct; 32// 33// static issue27340Struct* issue27340Ptr(issue27340Struct* p) { return p; } 34// 35// static void issue27340CFunc(issue27340Struct *p) {} 36// #endif /* _GNU_MAJOR_ < 5 */ 37import "C" 38 39func Issue27340GoFunc() { 40 var s C.issue27340Struct 41 C.issue27340CFunc(C.issue27340Ptr(&s)) 42} 43