aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2019-01-28 12:31:55 -0800
committerBrad Fitzpatrick <bradfitz@golang.org>2019-02-01 20:35:09 +0000
commite104ebfeabf575d9e33bb56decd6eceb40f041ce (patch)
treed3902184e3830b8758f59b5aeaf23fcdd3dbad66
parenteb0f2b3d27a896e4b832f2450490a2bbf72fbb6c (diff)
downloadgo-e104ebfeabf575d9e33bb56decd6eceb40f041ce.tar.gz
go-e104ebfeabf575d9e33bb56decd6eceb40f041ce.zip
[release-branch.go1.11] cmd/cgo: disable GCC 9 warnings triggered by cgo code
GCC 9 has started emitting warnings when taking the address of a field in a packed struct may cause a misaligned pointer. We use packed structs in cgo to ensure that our field layout matches the C compiler's layout. Our pointers are always aligned, so disable the warning Updates #29962 Fixes #29967 Change-Id: I7e290a7cf694a2c2958529e340ebed9fcd62089c Reviewed-on: https://go-review.googlesource.com/c/159859 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com> (cherry picked from commit f2a416b90ac68596ea05b97cefa8c72e7416e98f) Reviewed-on: https://go-review.googlesource.com/c/160449 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r--src/cmd/cgo/out.go8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/cmd/cgo/out.go b/src/cmd/cgo/out.go
index 89598c96e8..bbed5d598f 100644
--- a/src/cmd/cgo/out.go
+++ b/src/cmd/cgo/out.go
@@ -740,6 +740,10 @@ func (p *Package) writeExports(fgo2, fm, fgcc, fgcch io.Writer) {
fmt.Fprintf(fgcc, "#include <stdlib.h>\n")
fmt.Fprintf(fgcc, "#include \"_cgo_export.h\"\n\n")
+ // We use packed structs, but they are always aligned.
+ fmt.Fprintf(fgcc, "#pragma GCC diagnostic ignored \"-Wpragmas\"\n")
+ fmt.Fprintf(fgcc, "#pragma GCC diagnostic ignored \"-Waddress-of-packed-member\"\n")
+
fmt.Fprintf(fgcc, "extern void crosscall2(void (*fn)(void *, int, __SIZE_TYPE__), void *, int, __SIZE_TYPE__);\n")
fmt.Fprintf(fgcc, "extern __SIZE_TYPE__ _cgo_wait_runtime_init_done();\n")
fmt.Fprintf(fgcc, "extern void _cgo_release_context(__SIZE_TYPE__);\n\n")
@@ -1340,6 +1344,10 @@ __cgo_size_assert(double, 8)
extern char* _cgo_topofstack(void);
+/* We use packed structs, but they are always aligned. */
+#pragma GCC diagnostic ignored "-Wpragmas"
+#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
+
#include <errno.h>
#include <string.h>
`