diff options
| author | Russ Cox <rsc@golang.org> | 2013-09-09 15:07:23 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2013-09-09 15:07:23 -0400 |
| commit | 7d734d9252febfd91cb0ff5fc54f11defc5f4daa (patch) | |
| tree | ff3ade73bd586a219fc64d333da6623cc3c9526f /src/cmd/ld | |
| parent | 6252b41981a5e5566b727de14cda5aece4bee98f (diff) | |
| download | go-7d734d9252febfd91cb0ff5fc54f11defc5f4daa.tar.xz | |
build: remove various uses of C undefined behavior
If you thought gcc -ansi -pedantic was pedantic, just wait
until you meet clang -fsanitize=undefined.
I think this addresses all the reported "errors", but we'll
need another run to be sure.
all.bash still passes.
Update #5764
Dave, can you please try again?
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/13334049
Diffstat (limited to 'src/cmd/ld')
| -rw-r--r-- | src/cmd/ld/go.c | 3 | ||||
| -rw-r--r-- | src/cmd/ld/lib.c | 6 |
2 files changed, 4 insertions, 5 deletions
diff --git a/src/cmd/ld/go.c b/src/cmd/ld/go.c index 85f9d48b39..39ffa3d873 100644 --- a/src/cmd/ld/go.c +++ b/src/cmd/ld/go.c @@ -37,13 +37,12 @@ static void imported(char *pkg, char *import); static int hashstr(char *name) { - int h; + uint32 h; char *cp; h = 0; for(cp = name; *cp; h += *cp++) h *= 1119; - // not if(h < 0) h = ~h, because gcc 4.3 -O2 miscompiles it. h &= 0xffffff; return h; } diff --git a/src/cmd/ld/lib.c b/src/cmd/ld/lib.c index 0d67ae999b..b3c3713e2d 100644 --- a/src/cmd/ld/lib.c +++ b/src/cmd/ld/lib.c @@ -951,7 +951,7 @@ _lookup(char *symb, int v, int creat) { Sym *s; char *p; - int32 h; + uint32 h; int c; h = v; @@ -1613,7 +1613,7 @@ le16(uchar *b) uint32 le32(uchar *b) { - return b[0] | b[1]<<8 | b[2]<<16 | b[3]<<24; + return b[0] | b[1]<<8 | b[2]<<16 | (uint32)b[3]<<24; } uint64 @@ -1631,7 +1631,7 @@ be16(uchar *b) uint32 be32(uchar *b) { - return b[0]<<24 | b[1]<<16 | b[2]<<8 | b[3]; + return (uint32)b[0]<<24 | b[1]<<16 | b[2]<<8 | b[3]; } uint64 |
