Storing an out of range constant into a variable should

ideally cause the compiler to give an error.  Right now 6g
warns about large shifts but does not give an error.  This CL
removes the out of range shift from shift.go, so that it will
work with gccgo, and adds a test case in bugs/ to be fixed at
a later date.

R=ken,r
DELTA=23  (9 added, 14 deleted, 0 changed)
OCL=16085
CL=16088
This commit is contained in:
Ian Lance Taylor 2008-09-29 11:03:21 -07:00
parent 89ac5618ac
commit 08df4dcf7d
3 changed files with 14 additions and 14 deletions

10
test/bugs/bug108.go Normal file
View file

@ -0,0 +1,10 @@
// errchk $G $D/$F.go
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
func f() {
v := 1 << 1025; // ERROR "overflow"
}

View file

@ -37,14 +37,6 @@ Hello World!
=========== ken/rob2.go
(defn foo (add 12 34))
=========== ken/shift.go
ken/shift.go:50: stupid shift: 1025
ken/shift.go:51: stupid shift: 1025
ken/shift.go:57: stupid shift: 1025
ken/shift.go:58: stupid shift: 1025
ken/shift.go:64: stupid shift: 1025
ken/shift.go:65: stupid shift: 1025
=========== ken/simpprint.go
hello world
@ -172,6 +164,10 @@ BUG: errchk: command succeeded unexpectedly: 6g bugs/bug104.go
=========== bugs/bug107.go
BUG: errchk: command succeeded unexpectedly: 6g bugs/bug107.go
=========== bugs/bug108.go
bugs/bug108.go:4: stupid shift: 1025
BUG: errchk: command succeeded unexpectedly: 6g bugs/bug108.go
=========== fixedbugs/bug016.go
fixedbugs/bug016.go:7: overflow converting constant to <uint32>UINT32

View file

@ -51,22 +51,16 @@ main()
testi( int(1234) >> 0, 0,0,1);
testi( int(1234) << 5, 0,1,0);
testi( int(1234) >> 5, 0,1,1);
testi( int(1234) << 1025, 0,2,0);
testi( int(1234) >> 1025, 0,2,1);
testi(int(-1234) << 0, 1,0,0);
testi(int(-1234) >> 0, 1,0,1);
testi(int(-1234) << 5, 1,1,0);
testi(int(-1234) >> 5, 1,1,1);
testi(int(-1234) << 1025, 1,2,0);
testi(int(-1234) >> 1025, 1,2,1);
testu(uint(5678) << 0, 2,0,0);
testu(uint(5678) >> 0, 2,0,1);
testu(uint(5678) << 5, 2,1,0);
testu(uint(5678) >> 5, 2,1,1);
testu(uint(5678) << 1025, 2,2,0);
testu(uint(5678) >> 1025, 2,2,1);
/*
* test variable evaluations