summaryrefslogtreecommitdiff
path: root/test/const1.go
blob: 78fb1f4e207f6a4e29d1c6e4b05f12cdc429fd94 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// errchk $G -e $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

type I interface {}
const (
	// assume all types behave similarly to int8/uint8
	Int8 int8 = 101;
	Minus1 int8 = -1;
	Uint8 uint8 = 102;
	Const = 103;

	Float32 float32 = 104.5;
	Float float = 105.5;
	ConstFloat = 106.5;
	Big float64 = 1e300;

	String = "abc";
	Bool = true;
)

var (
	a1 = Int8 * 100;	// ERROR "overflow"
	a2 = Int8 * -1;	// OK
	a3 = Int8 * 1000;	// ERROR "overflow"
	a4 = Int8 * int8(1000);	// ERROR "overflow"
	a5 = int8(Int8 * 1000);	// ERROR "overflow"
	a6 = int8(Int8 * int8(1000));	// ERROR "overflow"
	a7 = Int8 - 2*Int8 - 2*Int8;	// ERROR "overflow"
	a8 = Int8 * Const / 100;	// ERROR "overflow"
	a9 = Int8 * (Const / 100);	// OK

	b1 = Uint8 * Uint8;	// ERROR "overflow"
	b2 = Uint8 * -1;	// ERROR "overflow"
	b3 = Uint8 - Uint8;	// OK
	b4 = Uint8 - Uint8 - Uint8;	// ERROR "overflow"
	b5 = uint8(^0);	// ERROR "overflow"
	b6 = ^uint8(0);	// OK
	b7 = uint8(Minus1);	// ERROR "overflow"
	b8 = uint8(int8(-1));	// ERROR "overflow"
	b8a = uint8(-1);	// ERROR "overflow"
	b9 byte = (1<<10) >> 8;	// OK
	b10 byte = (1<<10);	// ERROR "overflow"
	b11 byte = (byte(1)<<10) >> 8;	// ERROR "overflow"
	b12 byte = 1000;	// ERROR "overflow"
	b13 byte = byte(1000);	// ERROR "overflow"
	b14 byte = byte(100) * byte(100);	// ERROR "overflow"
	b15 byte = byte(100) * 100;	// ERROR "overflow"
	b16 byte = byte(0) * 1000;	// ERROR "overflow"
	b16a byte = 0 * 1000;	// OK
	b17 byte = byte(0) * byte(1000);	// ERROR "overflow"
	b18 byte = Uint8/0;	// ERROR "division by zero"

	c1 float64 = Big;
	c2 float64 = Big*Big;	// ERROR "overflow"
	c3 float64 = float64(Big)*Big;	// ERROR "overflow"
	c4 = Big*Big;	// ERROR "overflow"
	c5 = Big/0;	// ERROR "division by zero"
)

func f(int);

func main() {
	f(Int8);	// ERROR "convert|wrong type|cannot"
	f(Minus1);	// ERROR "convert|wrong type|cannot"
	f(Uint8);	// ERROR "convert|wrong type|cannot"
	f(Const);	// OK
	f(Float32);	// ERROR "convert|wrong type|cannot"
	f(Float);	// ERROR "convert|wrong type|cannot"
	f(ConstFloat);	// ERROR "truncate"
	f(ConstFloat - 0.5);	// OK
	f(Big);	// ERROR "convert|wrong type|cannot"
	f(String);	// ERROR "convert|wrong type|cannot|incompatible"
	f(Bool);	// ERROR "convert|wrong type|cannot|incompatible"
}