aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-11-12 00:22:45 -0800
committerRuss Cox <rsc@golang.org>2009-11-12 00:22:45 -0800
commit6634e3432d7e8311013dc96c1e78a11d4a2e2a3c (patch)
tree9b7aaa4d65064a7d79e06b3ccb2ab01af6c9d7aa
parent6dbd1429518bf39bc6c92028f78094f384348653 (diff)
downloadgo-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.c3
-rw-r--r--src/cmd/ld/go.c4
-rw-r--r--src/cmd/ld/lib.c4
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)