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