// Copyright 2012 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.

// unary expressions

package expr0 

type mybool bool

var (
	// bool
	b0 = true
	b1 bool = b0
	b2 = !true
	b3 = !b1
	b4 bool = !true
	b5 bool = !b4
	b6 = +b0 /* ERROR "not defined" */
	b7 = -b0 /* ERROR "not defined" */
	b8 = ^b0 /* ERROR "not defined" */
	b9 = *b0 /* ERROR "cannot indirect" */
	b10 = &true /* ERROR "cannot take address" */
	b11 = &b0
	b12 = <-b0 /* ERROR "cannot receive" */
	b13 = & & /* ERROR "cannot take address" */ b0

	// byte
	_ = byte(0)
	_ = byte(- /* ERROR "cannot convert" */ 1)
	_ = - /* ERROR "-byte\(1\) \(constant -1 of type byte\) overflows byte" */ byte(1) // test for issue 11367
	_ = byte /* ERROR "overflows byte" */ (0) - byte(1)

	// int
	i0 = 1
	i1 int = i0
	i2 = +1
	i3 = +i0
	i4 int = +1
	i5 int = +i4
	i6 = -1
	i7 = -i0
	i8 int = -1
	i9 int = -i4
	i10 = !i0 /* ERROR "not defined" */
	i11 = ^1
	i12 = ^i0
	i13 int = ^1
	i14 int = ^i4
	i15 = *i0 /* ERROR "cannot indirect" */
	i16 = &i0
	i17 = *i16
	i18 = <-i16 /* ERROR "cannot receive" */

	// uint
	u0 = uint(1)
	u1 uint = u0
	u2 = +1
	u3 = +u0
	u4 uint = +1
	u5 uint = +u4
	u6 = -1
	u7 = -u0
	u8 uint = - /* ERROR "overflows" */ 1
	u9 uint = -u4
	u10 = !u0 /* ERROR "not defined" */
	u11 = ^1
	u12 = ^i0
	u13 uint = ^ /* ERROR "overflows" */ 1
	u14 uint = ^u4
	u15 = *u0 /* ERROR "cannot indirect" */
	u16 = &u0
	u17 = *u16
	u18 = <-u16 /* ERROR "cannot receive" */
	u19 = ^uint(0)

	// float64
	f0 = float64(1)
	f1 float64 = f0
	f2 = +1
	f3 = +f0
	f4 float64 = +1
	f5 float64 = +f4
	f6 = -1
	f7 = -f0
	f8 float64 = -1
	f9 float64 = -f4
	f10 = !f0 /* ERROR "not defined" */
	f11 = ^1
	f12 = ^i0
	f13 float64 = ^1
	f14 float64 = ^f4 /* ERROR "not defined" */
	f15 = *f0 /* ERROR "cannot indirect" */
	f16 = &f0
	f17 = *u16
	f18 = <-u16 /* ERROR "cannot receive" */

	// complex128
	c0 = complex128(1)
	c1 complex128 = c0
	c2 = +1
	c3 = +c0
	c4 complex128 = +1
	c5 complex128 = +c4
	c6 = -1
	c7 = -c0
	c8 complex128 = -1
	c9 complex128 = -c4
	c10 = !c0 /* ERROR "not defined" */
	c11 = ^1
	c12 = ^i0
	c13 complex128 = ^1
	c14 complex128 = ^c4 /* ERROR "not defined" */
	c15 = *c0 /* ERROR "cannot indirect" */
	c16 = &c0
	c17 = *u16
	c18 = <-u16 /* ERROR "cannot receive" */

	// string
	s0 = "foo"
	s1 = +"foo" /* ERROR "not defined" */
	s2 = -s0 /* ERROR "not defined" */
	s3 = !s0 /* ERROR "not defined" */
	s4 = ^s0 /* ERROR "not defined" */
	s5 = *s4
	s6 = &s4
	s7 = *s6
	s8 = <-s7

	// channel
	ch chan int
	rc <-chan float64
	sc chan <- string
	ch0 = +ch /* ERROR "not defined" */
	ch1 = -ch /* ERROR "not defined" */
	ch2 = !ch /* ERROR "not defined" */
	ch3 = ^ch /* ERROR "not defined" */
	ch4 = *ch /* ERROR "cannot indirect" */
	ch5 = &ch
	ch6 = *ch5
	ch7 = <-ch
	ch8 = <-rc
	ch9 = <-sc /* ERROR "cannot receive" */
	ch10, ok = <-ch
	// ok is of type bool
	ch11, myok = <-ch
	_ mybool = myok /* ERROR "cannot use .* in variable declaration" */
)

// address of composite literals
type T struct{x, y int}

func f() T { return T{} }

var (
	_ = &T{1, 2}
	_ = &[...]int{}
	_ = &[]int{}
	_ = &[]int{}
	_ = &map[string]T{}
	_ = &(T{1, 2})
	_ = &((((T{1, 2}))))
	_ = &f /* ERROR "cannot take address" */ ()
)

// recursive pointer types
type P *P

var (
	p1 P = new(P)
	p2 P = *p1
	p3 P = &p2
)

func g() (a, b int) { return }

func _() {
	_ = -g /* ERROR 2-valued g */ ()
	_ = <-g /* ERROR 2-valued g */ ()
}
