]> Cypherpunks repositories - gostls13.git/commitdiff
gc: implement new shift rules
authorRuss Cox <rsc@golang.org>
Tue, 31 May 2011 19:05:40 +0000 (15:05 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 31 May 2011 19:05:40 +0000 (15:05 -0400)
The change is that 1.0<<2 is now okay.

R=ken2
CC=golang-dev
https://golang.org/cl/4524084

src/cmd/gc/const.c
test/golden.out
test/shift2.go

index a36ec68c0aa27e9cb0a1172815339e7a0c3c9ea6..8fe9072b23e1ecab0a831593440e0025df46fa39 100644 (file)
@@ -103,6 +103,8 @@ convlit1(Node **np, Type *t, int explicit)
        case ORSH:
                convlit1(&n->left, t, explicit && isideal(n->left->type));
                t = n->left->type;
+               if(t != T && t->etype == TIDEAL && n->val.ctype != CTINT)
+                       n->val = toint(n->val);
                if(t != T && !isint[t->etype]) {
                        yyerror("invalid operation: %#N (shift of type %T)", n, t);
                        t = T;
@@ -514,6 +516,8 @@ evconst(Node *n)
                n->right = nr;
                if(nr->type && (issigned[nr->type->etype] || !isint[nr->type->etype]))
                        goto illegal;
+               nl->val = toint(nl->val);
+               nr->val = toint(nr->val);
                break;
        }
 
index ba60fbfed1324061de35f4fd1d7235cac12ffd79..4400e41dd147545e9fdac29e0aaaf37164e63023 100644 (file)
@@ -40,21 +40,6 @@ hello, world
 -9223372036854775808
 9223372036854775807
 
-=========== ./shift1.go
-BUG: errchk: ./shift1.go:33: error message does not match 'overflow'
-errchk: ./shift1.go:34: error message does not match 'overflow'
-errchk: ./shift1.go:35: error message does not match 'overflow'
-
-=========== ./shift2.go
-./shift2.go:22: illegal constant expression: ideal LSH uint
-./shift2.go:35: illegal constant expression: ideal LSH uint
-./shift2.go:36: illegal constant expression: ideal LSH uint
-./shift2.go:36: invalid operation: 2 << c (shift of type float64)
-./shift2.go:39: illegal constant expression: ideal LSH uint
-./shift2.go:40: illegal constant expression: ideal LSH uint
-./shift2.go:40: invalid operation: 2 << c (shift of type float64)
-./shift2.go:40: cannot use 2 << c as type interface { } in function argument
-
 =========== ./sigchld.go
 survived SIGCHLD
 
index b08b37b7f9dc687bfcf67db6726fc81d7ab8b6d9..ec4c7addc2d733764deebcac5f69d13045cb1b74 100644 (file)
@@ -1,4 +1,4 @@
-// $G $D/$F.go && $L $F.$A && ./$A.out
+// $G $D/$F.go || echo BUG: shift2
 
 // Copyright 2011 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style