]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cgo: silence two gcc warnings for *.cgo2.c
authorShenghou Ma <minux.ma@gmail.com>
Thu, 11 Jul 2013 20:35:53 +0000 (04:35 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Thu, 11 Jul 2013 20:35:53 +0000 (04:35 +0800)
1. "int e;" is unused, generating "unused variable" error.
2. a->e was typed void *[2], but was accessed with *(int *)(a->e), this
generated "dereferencing type-punned pointer will break strict-aliasing rules" error.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/11009043

src/cmd/cgo/out.go

index be05c85a2d1877cf37be0a5ab61b4d56a587dfcc..20f5afd5c707a6ee3b9ee4c072766b9e03f51fe3 100644 (file)
@@ -47,7 +47,7 @@ func (p *Package) writeDefs() {
        } else {
                // If we're not importing runtime/cgo, we *are* runtime/cgo,
                // which provides crosscall2.  We just need a prototype.
-               fmt.Fprintf(fm, "void crosscall2(void(*fn)(void*, int), void *a, int c);")
+               fmt.Fprintf(fm, "void crosscall2(void(*fn)(void*, int), void *a, int c);\n")
        }
        fmt.Fprintf(fm, "void _cgo_allocate(void *a, int c) { }\n")
        fmt.Fprintf(fm, "void _cgo_panic(void *a, int c) { }\n")
@@ -282,7 +282,7 @@ func (p *Package) structType(n *Name) (string, int64) {
                off += pad
        }
        if n.AddError {
-               fmt.Fprint(&buf, "\t\tvoid *e[2]; /* error */\n")
+               fmt.Fprint(&buf, "\t\tint e[2*sizeof(void *)/sizeof(int)]; /* error */\n")
                off += 2 * p.PtrSize
        }
        if off == 0 {
@@ -478,7 +478,6 @@ func (p *Package) writeOutputFunc(fgcc *os.File, n *Name) {
        fmt.Fprintf(fgcc, "_cgo%s%s(void *v)\n", cPrefix, n.Mangle)
        fmt.Fprintf(fgcc, "{\n")
        if n.AddError {
-               fmt.Fprintf(fgcc, "\tint e;\n") // assuming 32 bit (see comment above structType)
                fmt.Fprintf(fgcc, "\terrno = 0;\n")
        }
        // We're trying to write a gcc struct that matches 6c/8c/5c's layout.