...
Run Format

Text file src/go/types/testdata/conversions2.src

Documentation: go/types/testdata

     1	// Copyright 2016 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	// Test various valid and invalid struct assignments and conversions.
     6	// Does not compile.
     7	
     8	package conversions2
     9	
    10	type I interface {
    11		m()
    12	}
    13	
    14	// conversions between structs
    15	
    16	func _() {
    17		type S struct{}
    18		type T struct{}
    19		var s S
    20		var t T
    21		var u struct{}
    22		s = s
    23		s = t // ERROR "cannot use .* in assignment"
    24		s = u
    25		s = S(s)
    26		s = S(t)
    27		s = S(u)
    28		t = u
    29		t = T(u)
    30	}
    31	
    32	func _() {
    33		type S struct{ x int }
    34		type T struct {
    35			x int "foo"
    36		}
    37		var s S
    38		var t T
    39		var u struct {
    40			x int "bar"
    41		}
    42		s = s
    43		s = t // ERROR "cannot use .* in assignment"
    44		s = u // ERROR "cannot use .* in assignment"
    45		s = S(s)
    46		s = S(t)
    47		s = S(u)
    48		t = u // ERROR "cannot use .* in assignment"
    49		t = T(u)
    50	}
    51	
    52	func _() {
    53		type E struct{ x int }
    54		type S struct{ x E }
    55		type T struct {
    56			x E "foo"
    57		}
    58		var s S
    59		var t T
    60		var u struct {
    61			x E "bar"
    62		}
    63		s = s
    64		s = t // ERROR "cannot use .* in assignment"
    65		s = u // ERROR "cannot use .* in assignment"
    66		s = S(s)
    67		s = S(t)
    68		s = S(u)
    69		t = u // ERROR "cannot use .* in assignment"
    70		t = T(u)
    71	}
    72	
    73	func _() {
    74		type S struct {
    75			x struct {
    76				x int "foo"
    77			}
    78		}
    79		type T struct {
    80			x struct {
    81				x int "bar"
    82			} "foo"
    83		}
    84		var s S
    85		var t T
    86		var u struct {
    87			x struct {
    88				x int "bar"
    89			} "bar"
    90		}
    91		s = s
    92		s = t // ERROR "cannot use .* in assignment"
    93		s = u // ERROR "cannot use .* in assignment"
    94		s = S(s)
    95		s = S(t)
    96		s = S(u)
    97		t = u // ERROR "cannot use .* in assignment"
    98		t = T(u)
    99	}
   100	
   101	func _() {
   102		type E1 struct {
   103			x int "foo"
   104		}
   105		type E2 struct {
   106			x int "bar"
   107		}
   108		type S struct{ x E1 }
   109		type T struct {
   110			x E2 "foo"
   111		}
   112		var s S
   113		var t T
   114		var u struct {
   115			x E2 "bar"
   116		}
   117		s = s
   118		s = t // ERROR "cannot use .* in assignment"
   119		s = u // ERROR "cannot use .* in assignment"
   120		s = S(s)
   121		s = S(t /* ERROR "cannot convert" */ )
   122		s = S(u /* ERROR "cannot convert" */ )
   123		t = u   // ERROR "cannot use .* in assignment"
   124		t = T(u)
   125	}
   126	
   127	func _() {
   128		type E struct{ x int }
   129		type S struct {
   130			f func(struct {
   131				x int "foo"
   132			})
   133		}
   134		type T struct {
   135			f func(struct {
   136				x int "bar"
   137			})
   138		}
   139		var s S
   140		var t T
   141		var u struct{ f func(E) }
   142		s = s
   143		s = t // ERROR "cannot use .* in assignment"
   144		s = u // ERROR "cannot use .* in assignment"
   145		s = S(s)
   146		s = S(t)
   147		s = S(u /* ERROR "cannot convert" */ )
   148		t = u   // ERROR "cannot use .* in assignment"
   149		t = T(u /* ERROR "cannot convert" */ )
   150	}
   151	
   152	// conversions between pointers to structs
   153	
   154	func _() {
   155		type S struct{}
   156		type T struct{}
   157		var s *S
   158		var t *T
   159		var u *struct{}
   160		s = s
   161		s = t // ERROR "cannot use .* in assignment"
   162		s = u // ERROR "cannot use .* in assignment"
   163		s = (*S)(s)
   164		s = (*S)(t)
   165		s = (*S)(u)
   166		t = u // ERROR "cannot use .* in assignment"
   167		t = (*T)(u)
   168	}
   169	
   170	func _() {
   171		type S struct{ x int }
   172		type T struct {
   173			x int "foo"
   174		}
   175		var s *S
   176		var t *T
   177		var u *struct {
   178			x int "bar"
   179		}
   180		s = s
   181		s = t // ERROR "cannot use .* in assignment"
   182		s = u // ERROR "cannot use .* in assignment"
   183		s = (*S)(s)
   184		s = (*S)(t)
   185		s = (*S)(u)
   186		t = u // ERROR "cannot use .* in assignment"
   187		t = (*T)(u)
   188	}
   189	
   190	func _() {
   191		type E struct{ x int }
   192		type S struct{ x E }
   193		type T struct {
   194			x E "foo"
   195		}
   196		var s *S
   197		var t *T
   198		var u *struct {
   199			x E "bar"
   200		}
   201		s = s
   202		s = t // ERROR "cannot use .* in assignment"
   203		s = u // ERROR "cannot use .* in assignment"
   204		s = (*S)(s)
   205		s = (*S)(t)
   206		s = (*S)(u)
   207		t = u // ERROR "cannot use .* in assignment"
   208		t = (*T)(u)
   209	}
   210	
   211	func _() {
   212		type S struct {
   213			x struct {
   214				x int "foo"
   215			}
   216		}
   217		type T struct {
   218			x struct {
   219				x int "bar"
   220			} "foo"
   221		}
   222		var s *S
   223		var t *T
   224		var u *struct {
   225			x struct {
   226				x int "bar"
   227			} "bar"
   228		}
   229		s = s
   230		s = t // ERROR "cannot use .* in assignment"
   231		s = u // ERROR "cannot use .* in assignment"
   232		s = (*S)(s)
   233		s = (*S)(t)
   234		s = (*S)(u)
   235		t = u // ERROR "cannot use .* in assignment"
   236		t = (*T)(u)
   237	}
   238	
   239	func _() {
   240		type E1 struct {
   241			x int "foo"
   242		}
   243		type E2 struct {
   244			x int "bar"
   245		}
   246		type S struct{ x E1 }
   247		type T struct {
   248			x E2 "foo"
   249		}
   250		var s *S
   251		var t *T
   252		var u *struct {
   253			x E2 "bar"
   254		}
   255		s = s
   256		s = t // ERROR "cannot use .* in assignment"
   257		s = u // ERROR "cannot use .* in assignment"
   258		s = (*S)(s)
   259		s = (*S)(t /* ERROR "cannot convert" */ )
   260		s = (*S)(u /* ERROR "cannot convert" */ )
   261		t = u      // ERROR "cannot use .* in assignment"
   262		t = (*T)(u)
   263	}
   264	
   265	func _() {
   266		type E struct{ x int }
   267		type S struct {
   268			f func(struct {
   269				x int "foo"
   270			})
   271		}
   272		type T struct {
   273			f func(struct {
   274				x int "bar"
   275			})
   276		}
   277		var s *S
   278		var t *T
   279		var u *struct{ f func(E) }
   280		s = s
   281		s = t // ERROR "cannot use .* in assignment"
   282		s = u // ERROR "cannot use .* in assignment"
   283		s = (*S)(s)
   284		s = (*S)(t)
   285		s = (*S)(u /* ERROR "cannot convert" */ )
   286		t = u      // ERROR "cannot use .* in assignment"
   287		t = (*T)(u /* ERROR "cannot convert" */ )
   288	}
   289	
   290	func _() {
   291		type E struct{ x int }
   292		type S struct {
   293			f func(*struct {
   294				x int "foo"
   295			})
   296		}
   297		type T struct {
   298			f func(*struct {
   299				x int "bar"
   300			})
   301		}
   302		var s *S
   303		var t *T
   304		var u *struct{ f func(E) }
   305		s = s
   306		s = t // ERROR "cannot use .* in assignment"
   307		s = u // ERROR "cannot use .* in assignment"
   308		s = (*S)(s)
   309		s = (*S)(t)
   310		s = (*S)(u /* ERROR "cannot convert" */ )
   311		t = u      // ERROR "cannot use .* in assignment"
   312		t = (*T)(u /* ERROR "cannot convert" */ )
   313	}

View as plain text