// errorcheck

// 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
	Float64    float64 = 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(Float64)          // 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"
}

const ptr = nil // ERROR "const.*nil"
