]> Cypherpunks repositories - gostls13.git/commitdiff
build: more "undefined behavior" fixes
authorRuss Cox <rsc@golang.org>
Tue, 10 Sep 2013 18:54:55 +0000 (14:54 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 10 Sep 2013 18:54:55 +0000 (14:54 -0400)
Fixes #5764.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/13441051

src/cmd/6g/gsubr.c
src/cmd/6l/obj.c
src/cmd/6l/span.c
src/libbio/bgetc.c

index 0e45cc0ebe560db88271355788553a21f04fc362..e68a0899e9d4464d22cab4d4625477f73418b79f 100644 (file)
@@ -540,7 +540,7 @@ ginscon(int as, vlong c, Node *n2)
 
        nodconst(&n1, types[TINT64], c);
 
-       if(as != AMOVQ && (c < -1LL<<31 || c >= 1LL<<31)) {
+       if(as != AMOVQ && (c < -(1LL<<31) || c >= 1LL<<31)) {
                // cannot have 64-bit immediokate in ADD, etc.
                // instead, MOV into register first.
                regalloc(&ntmp, types[TINT64], N);
index 12ca0f63501ea0dff83e4bcb6eee77979a673273..a12b6e6f9ba95b1502e73b8509b217b3a8cafb61 100644 (file)
@@ -346,7 +346,7 @@ zaddr(char *pn, Biobuf *f, Adr *a, Sym *h[])
                a->offset = BGETLE4(f);
                if(t & T_64) {
                        a->offset &= 0xFFFFFFFFULL;
-                       a->offset |= (vlong)BGETLE4(f) << 32;
+                       a->offset |= (uvlong)BGETLE4(f) << 32;
                }
        }
        a->sym = S;
index 9fad0eed0ac6ca7e77805a2e7c1b4b8c52522931..74f11d635a8bdf96dbdff39edcf2754db5758a75 100644 (file)
@@ -1237,6 +1237,8 @@ found:
                break;
        }
 
+       if(z >= nelem(o->op))
+               sysfatal("asmins bad table %P", p);
        op = o->op[z];
        if(op == 0x0f) {
                *andptr++ = op;
index f3db0f3029cbd19a8b1c3ebeb06ce6f0657922c8..3399fb16b310b433f373af1b6ed6ae922c37d810 100644 (file)
@@ -83,7 +83,7 @@ Bgetle4(Biobuf *bp)
 
        l = Bgetle2(bp);
        h = Bgetle2(bp);
-       return l|(h<<16);
+       return l|((uint32)h<<16);
 }
 
 int