mirror of
https://github.com/golang/go
synced 2024-11-22 02:14:40 -07:00
gc: implement new shift rules
The change is that 1.0<<2 is now okay. R=ken2 CC=golang-dev https://golang.org/cl/4524084
This commit is contained in:
parent
9b82408f6d
commit
5ab096d030
@ -103,6 +103,8 @@ convlit1(Node **np, Type *t, int explicit)
|
|||||||
case ORSH:
|
case ORSH:
|
||||||
convlit1(&n->left, t, explicit && isideal(n->left->type));
|
convlit1(&n->left, t, explicit && isideal(n->left->type));
|
||||||
t = 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]) {
|
if(t != T && !isint[t->etype]) {
|
||||||
yyerror("invalid operation: %#N (shift of type %T)", n, t);
|
yyerror("invalid operation: %#N (shift of type %T)", n, t);
|
||||||
t = T;
|
t = T;
|
||||||
@ -514,6 +516,8 @@ evconst(Node *n)
|
|||||||
n->right = nr;
|
n->right = nr;
|
||||||
if(nr->type && (issigned[nr->type->etype] || !isint[nr->type->etype]))
|
if(nr->type && (issigned[nr->type->etype] || !isint[nr->type->etype]))
|
||||||
goto illegal;
|
goto illegal;
|
||||||
|
nl->val = toint(nl->val);
|
||||||
|
nr->val = toint(nr->val);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,21 +40,6 @@ hello, world
|
|||||||
-9223372036854775808
|
-9223372036854775808
|
||||||
9223372036854775807
|
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
|
=========== ./sigchld.go
|
||||||
survived SIGCHLD
|
survived SIGCHLD
|
||||||
|
|
||||||
|
@ -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.
|
// Copyright 2011 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
|
Loading…
Reference in New Issue
Block a user