// compile // Copyright 2020 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. // Make sure that literal value can be passed to struct // blank field of array/struct type, see issue #38690. package main type A1 = [0]int type A2 = [1]int type S1 struct{} type S2 struct { x int } type S3 = struct{} type S4 = struct{ x int } type S struct { x int _ [0]int _ [1]int _ A1 _ A2 _ S1 _ S2 _ S3 _ S4 _ [1]S4 } var s = S{1, [0]int{}, [1]int{1}, A1{}, A2{1}, S1{}, S2{1}, S3{}, S4{1}, [1]S4{}} func main() { f1() mustPanic(f2) mustPanic(f3) } func f1() { _ = S{1, [0]int{}, [1]int{1}, A1{}, A2{1}, S1{}, S2{1}, S3{}, S4{1}, [1]S4{}} } func f2() { _ = S{1, [0]int{}, [1]int{1}, A1{}, A2{1}, S1{}, S2{1}, S3{}, func() S4 { panic("") }(), [1]S4{}} } func f3() { _ = S{1, [0]int{}, [1]int{1}, A1{}, A2{1}, S1{}, S2{1}, S3{}, S4{1}, func() [1]S4 { panic("") }()} } func mustPanic(f func()) { defer func() { if recover() == nil { panic("expected panic, got nil") } }() f() }