diff options
author | Russ Cox <rsc@golang.org> | 2009-11-12 00:22:45 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-11-12 00:22:45 -0800 |
commit | 6634e3432d7e8311013dc96c1e78a11d4a2e2a3c (patch) | |
tree | 9b7aaa4d65064a7d79e06b3ccb2ab01af6c9d7aa | |
parent | 6dbd1429518bf39bc6c92028f78094f384348653 (diff) | |
download | go-6634e3432d7e8311013dc96c1e78a11d4a2e2a3c.tar.gz go-6634e3432d7e8311013dc96c1e78a11d4a2e2a3c.zip |
cc, ld: fix more gcc 4.3 -O2 compile bugs
same as https://golang.org/cl/152088
in more files.
Fixes #83.
R=r, r1
https://golang.org/cl/152091
-rw-r--r-- | src/cmd/cc/lex.c | 3 | ||||
-rw-r--r-- | src/cmd/ld/go.c | 4 | ||||
-rw-r--r-- | src/cmd/ld/lib.c | 4 |
3 files changed, 5 insertions, 6 deletions
diff --git a/src/cmd/cc/lex.c b/src/cmd/cc/lex.c index ff80bfb324..9fbf3a3acd 100644 --- a/src/cmd/cc/lex.c +++ b/src/cmd/cc/lex.c @@ -411,8 +411,7 @@ lookup(void) h += *p++; } n = (p - symb) + 1; - if((int32)h < 0) - h = ~h; + h &= 0xffffff; h %= NHASH; c = symb[0]; for(s = hash[h]; s != S; s = s->link) { diff --git a/src/cmd/ld/go.c b/src/cmd/ld/go.c index aa006a847e..8f0e66d330 100644 --- a/src/cmd/ld/go.c +++ b/src/cmd/ld/go.c @@ -42,8 +42,8 @@ hashstr(char *name) h = 0; for(cp = name; *cp; h += *cp++) h *= 1119; - if(h < 0) - h = ~h; + // 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 99a76558d3..4a518c79b1 100644 --- a/src/cmd/ld/lib.c +++ b/src/cmd/ld/lib.c @@ -384,8 +384,8 @@ lookup(char *symb, int v) for(p=symb; c = *p; p++) h = h+h+h + c; l = (p - symb) + 1; - if(h < 0) - h = ~h; + // not if(h < 0) h = ~h, because gcc 4.3 -O2 miscompiles it. + h &= 0xffffff; h %= NHASH; for(s = hash[h]; s != S; s = s->link) if(s->version == v) |