github.com/bir3/gocompiler@v0.9.2202/src/cmd/cgo/internal/test/issue27340/a.go (about)

     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  
     9  package 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 */
    37  import "C"
    38  
    39  func Issue27340GoFunc() {
    40  	var s C.issue27340Struct
    41  	C.issue27340CFunc(C.issue27340Ptr(&s))
    42  }