1
0
mirror of https://github.com/golang/go synced 2024-10-07 05:11:22 -06:00
go/src/cmd
Dmitriy Vyukov ca4b868e9a cmd/gc: racewalk: fix compiler crash
The code:
func main() {
        v := make([]int64, 10)
        i := 1
        _ = v[(i*4)/3]
}
crashes compiler with:

Program received signal SIGSEGV, Segmentation fault.
0x000000000043c274 in walkexpr (np=0x7fffffffc9b8, init=0x0) at src/cmd/gc/walk.c:587
587			*init = concat(*init, n->ninit);
(gdb) bt
#0  0x000000000043c274 in walkexpr (np=0x7fffffffc9b8, init=0x0) at src/cmd/gc/walk.c:587
#1  0x0000000000432d15 in copyexpr (n=0x7ffff7f69a48, t=<optimized out>, init=0x0) at src/cmd/gc/subr.c:2020
#2  0x000000000043f281 in walkdiv (init=0x0, np=0x7fffffffca70) at src/cmd/gc/walk.c:2901
#3  walkexpr (np=0x7ffff7f69760, init=0x0) at src/cmd/gc/walk.c:956
#4  0x000000000043d801 in walkexpr (np=0x7ffff7f69bc0, init=0x0) at src/cmd/gc/walk.c:988
#5  0x000000000043cc9b in walkexpr (np=0x7ffff7f69d38, init=0x0) at src/cmd/gc/walk.c:1068
#6  0x000000000043c50b in walkexpr (np=0x7ffff7f69f50, init=0x0) at src/cmd/gc/walk.c:879
#7  0x000000000043c50b in walkexpr (np=0x7ffff7f6a0c8, init=0x0) at src/cmd/gc/walk.c:879
#8  0x0000000000440a53 in walkexprlist (l=0x7ffff7f6a0c8, init=0x0) at src/cmd/gc/walk.c:357
#9  0x000000000043d0bf in walkexpr (np=0x7fffffffd318, init=0x0) at src/cmd/gc/walk.c:566
#10 0x00000000004402bf in vmkcall (fn=<optimized out>, t=0x0, init=0x0, va=0x7fffffffd368) at src/cmd/gc/walk.c:2275
#11 0x000000000044059a in mkcall (name=<optimized out>, t=0x0, init=0x0) at src/cmd/gc/walk.c:2287
#12 0x000000000042862b in callinstr (np=0x7fffffffd4c8, init=0x7fffffffd568, wr=0, skip=<optimized out>) at src/cmd/gc/racewalk.c:478
#13 0x00000000004288b7 in racewalknode (np=0x7ffff7f68108, init=0x7fffffffd568, wr=0, skip=0) at src/cmd/gc/racewalk.c:287
#14 0x0000000000428781 in racewalknode (np=0x7ffff7f65840, init=0x7fffffffd568, wr=0, skip=0) at src/cmd/gc/racewalk.c:302
#15 0x0000000000428abd in racewalklist (l=0x7ffff7f65840, init=0x0) at src/cmd/gc/racewalk.c:97
#16 0x0000000000428d0b in racewalk (fn=0x7ffff7f5f010) at src/cmd/gc/racewalk.c:63
#17 0x0000000000402b9c in compile (fn=0x7ffff7f5f010) at src/cmd/6g/../gc/pgen.c:67
#18 0x0000000000419f86 in funccompile (n=0x7ffff7f5f010, isclosure=0) at src/cmd/gc/dcl.c:1414
#19 0x0000000000424161 in p9main (argc=<optimized out>, argv=<optimized out>) at src/cmd/gc/lex.c:431
#20 0x0000000000401739 in main (argc=<optimized out>, argv=<optimized out>) at src/lib9/main.c:35

The problem is nil init passed to mkcall().

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6940045
2012-12-17 12:55:41 +04:00
..
5a cmd/gc, cmd/ld: struct field tracking 2012-11-02 00:17:21 -04:00
5c cmd/5c: fix dataflag annotation 2012-09-25 14:42:44 +08:00
5g cmd/{5,6,8}g: reduce size of Prog and Addr 2012-12-14 06:20:24 +11:00
5l cmd/ld: fix build on elf systems 2012-11-13 13:12:11 -05:00
6a cmd/gc, cmd/ld: struct field tracking 2012-11-02 00:17:21 -04:00
6c cmd/6c, cmd/8c: add fixjmp step to regopt. 2012-12-06 07:20:03 +01:00
6g cmd/{5,6,8}g: reduce size of Prog and Addr 2012-12-14 06:20:24 +11:00
6l cmd/6l, cmd/8l: emit no-ops to separate zero-stack funcs from nosplits. 2012-11-26 21:51:48 +01:00
8a cmd/8a: support XMM registers. 2012-12-06 07:27:38 +01:00
8c cmd/6c, cmd/8c: add fixjmp step to regopt. 2012-12-06 07:20:03 +01:00
8g cmd/{5,6,8}g: reduce size of Prog and Addr 2012-12-14 06:20:24 +11:00
8l cmd/6l, cmd/8l: emit no-ops to separate zero-stack funcs from nosplits. 2012-11-26 21:51:48 +01:00
addr2line runtime/pprof: support OS X CPU profiling 2012-02-28 16:18:24 -05:00
api cmd/api: speed up API check by 2x, caching parser.ParseFile calls 2012-11-19 13:50:20 -08:00
cc libmach, cmd/cc, cmd/cov, cmd/ld, cmd/prof: check malloc return value 2012-11-27 03:05:46 +08:00
cgo cmd/cgo: fix alignment of bool. 2012-11-21 13:04:38 -08:00
cov libmach, cmd/cc, cmd/cov, cmd/ld, cmd/prof: check malloc return value 2012-11-27 03:05:46 +08:00
dist cmd/go: handle os signals 2012-12-14 17:33:59 +11:00
fix cmd/fix: Add keys to printer.Config composite literals. 2012-12-16 19:31:59 -05:00
gc cmd/gc: racewalk: fix compiler crash 2012-12-17 12:55:41 +04:00
go cmd/go: handle os signals 2012-12-14 17:33:59 +11:00
godoc cmd/godoc: fix godoc net/http on windows 2012-12-01 00:42:50 +08:00
gofmt gofmt: test rewrite of (x.(type)) -> x.(type) 2012-12-06 09:20:03 -08:00
ld cmd/ld: skip 0-length write in cwrite 2012-12-06 00:00:20 -05:00
nm gofmt: apply gofmt -w src misc 2012-10-30 13:38:01 -07:00
objdump runtime/pprof: support OS X CPU profiling 2012-02-28 16:18:24 -05:00
pack cmd/pack: rename __.SYMDEF to __.GOSYMDEF 2012-09-13 10:26:21 -04:00
prof libmach, cmd/cc, cmd/cov, cmd/ld, cmd/prof: check malloc return value 2012-11-27 03:05:46 +08:00
vet vet: be less strict about number of arguments when a ... is present. 2012-12-06 15:17:31 +11:00
yacc cmd/yacc: allow utf-8 token values 2012-09-13 13:59:00 -07:00