1 env GO111MODULE=on
2 env GOTRACEBACK=single
3
4 # Go 1.21 work module should leave panicnil with an implicit default.
5 cp go.mod.21 go.mod
6 go list -f '{{.Module.GoVersion}} {{.DefaultGODEBUG}}'
7 ! stdout panicnil
8 stdout randautoseed=0
9
10 # Go 1.21 work module should NOT set panicnil=1 in Go 1.20 dependency.
11 cp go.mod.21 go.mod
12 go list -f '{{.Module.GoVersion}} {{.DefaultGODEBUG}}' q
13 ! stdout panicnil=1
14 ! stdout randautoseed
15
16 go mod download rsc.io/panicnil # for go.sum
17 go list -f '{{.Module.GoVersion}} {{.DefaultGODEBUG}}' rsc.io/panicnil
18 ! stdout panicnil=1
19 ! stdout randautoseed
20
21 # Go 1.20 work module should set panicnil=1.
22 cp go.mod.20 go.mod
23 go list -f '{{.Module.GoVersion}} {{.DefaultGODEBUG}}'
24 stdout panicnil=1
25 stdout randautoseed=0
26
27 # Go 1.20 work module should set panicnil=1 in Go 1.20 dependency.
28 cp go.mod.20 go.mod
29 go list -f '{{.Module.GoVersion}} {{.DefaultGODEBUG}}' q
30 stdout panicnil=1
31 ! stdout randautoseed
32
33 # Go 1.21 workspace should leave panicnil with an implicit default.
34 cat q/go.mod
35 cp go.work.21 go.work
36 go list -f '{{.Module.GoVersion}} {{.DefaultGODEBUG}}'
37 ! stdout panicnil
38 stdout randautoseed=0
39 rm go.work
40
41 # Go 1.20 workspace with Go 1.21 module cannot happen.
42 cp go.work.20 go.work
43 cp go.mod.21 go.mod
44 ! go list -f '{{.Module.GoVersion}} {{.DefaultGODEBUG}}'
45 stderr 'go: module . listed in go.work file requires go >= 1.21'
46 rm go.work
47
48 [short] skip
49
50 # Programs in Go 1.21 work module should trigger run-time error.
51 cp go.mod.21 go.mod
52 ! go run .
53 stderr 'panic: panic called with nil argument'
54
55 ! go run rsc.io/panicnil
56 stderr 'panic: panic called with nil argument'
57
58 # Programs in Go 1.20 work module use old panic nil behavior.
59 cp go.mod.20 go.mod
60 ! go run .
61 stderr 'panic: nil'
62
63 ! go run rsc.io/panicnil
64 stderr 'panic: nil'
65
66 # Programs in no module at all should use their go.mod file.
67 rm go.mod
68 ! go run rsc.io/panicnil@v1.0.0
69 stderr 'panic: nil'
70
71 rm go.mod
72 ! go run rsc.io/panicnil@v1.1.0
73 stderr 'panic: panic called with nil argument'
74
75 -- go.work.21 --
76 go 1.21
77 use .
78 use ./q
79
80 -- go.work.20 --
81 go 1.20
82 use .
83 use ./q
84
85 -- go.mod.21 --
86 go 1.21
87 module m
88 require q v1.0.0
89 replace q => ./q
90 require rsc.io/panicnil v1.0.0
91
92 -- go.mod.20 --
93 go 1.20
94 module m
95 require q v1.0.0
96 replace q => ./q
97 require rsc.io/panicnil v1.0.0
98
99 -- p.go --
100 //go:debug randautoseed=0
101
102 package main
103
104 func main() {
105 panic(nil)
106 }
107
108 -- q/go.mod --
109 go 1.20
110 module q
111
112 -- q/q.go --
113 package main
114 func main() {}
115
View as plain text