aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ld
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-09-09 15:07:23 -0400
committerRuss Cox <rsc@golang.org>2013-09-09 15:07:23 -0400
commit7d734d9252febfd91cb0ff5fc54f11defc5f4daa (patch)
treeff3ade73bd586a219fc64d333da6623cc3c9526f /src/cmd/ld
parent6252b41981a5e5566b727de14cda5aece4bee98f (diff)
downloadgo-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.c3
-rw-r--r--src/cmd/ld/lib.c6
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