github.com/riscv/riscv-go@v0.0.0-20200123204226-124ebd6fcc8e/misc/cgo/test/issue1635.go (about)

     1  // Copyright 2012 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  package cgotest
     6  
     7  /*
     8  // Mac OS X's gcc will generate scattered relocation 2/1 for
     9  // this function on Darwin/386, and 8l couldn't handle it.
    10  // this example is in issue 1635
    11  #include <stdio.h>
    12  void scatter() {
    13  	void *p = scatter;
    14  	printf("scatter = %p\n", p);
    15  }
    16  
    17  // Adding this explicit extern declaration makes this a test for
    18  // https://gcc.gnu.org/PR68072 aka https://golang.org/issue/13344 .
    19  // It used to cause a cgo error when building with GCC 6.
    20  extern int hola;
    21  
    22  // this example is in issue 3253
    23  int hola = 0;
    24  int testHola() { return hola; }
    25  */
    26  import "C"
    27  
    28  import "testing"
    29  
    30  func test1635(t *testing.T) {
    31  	C.scatter()
    32  	if v := C.hola; v != 0 {
    33  		t.Fatalf("C.hola is %d, should be 0", v)
    34  	}
    35  	if v := C.testHola(); v != 0 {
    36  		t.Fatalf("C.testHola() is %d, should be 0", v)
    37  	}
    38  }