1
0
mirror of https://github.com/golang/go synced 2024-10-04 10:11:21 -06:00
go/src/cmd/gc
Russ Cox 1357f548b0 cmd/gc: fix two select temporary bugs
The introduction of temporaries in order.c was not
quite right for two corner cases:

1) The rewrite that pushed new variables on the lhs of
a receive into the body of the case was dropping the
declaration of the variables. If the variables escape,
the declaration is what allocates them.
Caught by escape analysis sanity check.
In fact the declarations should move into the body
always, so that we only allocate if the corresponding
case is selected. Do that. (This is an optimization that
was already present in Go 1.2. The new order code just
made it stop working.)

Fixes #7997.

2) The optimization to turn a single-recv select into
an ordinary receive assumed it could take the address
of the destination; not so if the destination is _.

Fixes #7998.

LGTM=iant
R=golang-codereviews, iant
CC=golang-codereviews
https://golang.org/cl/100480043
2014-05-15 19:16:18 -04:00
..
align.c all: merge NaCl branch (part 1) 2014-02-25 09:47:42 -05:00
array.c cmd/5g, cmd/5l, cmd/6g, cmd/6l, cmd/8g, cmd/8l, cmd/gc, runtime: generate pointer maps by liveness analysis 2013-12-05 17:35:22 -08:00
bisonerrors cmd/gc: make bisonerrors compatible with GNU Bison 3.0 2013-07-30 04:31:15 +02:00
bits.c cmd/gc: alias more variables during register allocation 2014-05-12 17:10:36 -04:00
builtin.c cmd/gc, runtime: optimize map[string] lookup from []byte key 2014-04-03 19:05:17 -04:00
bv.c cmd/gc: handle non-escaping address-taken variables better 2014-01-16 10:32:30 -05:00
closure.c cmd/gc: shorten even more temporary lifetimes 2014-04-02 14:09:42 -04:00
const.c cmd/gc: fix segfault in isgoconst. 2014-04-16 23:12:06 -04:00
cplx.c cmd/gc: silence valgrind error 2013-03-13 16:12:38 -04:00
dcl.c cmd/gc: correct liveness for fat variables 2014-02-15 10:58:55 -05:00
doc.go all: final merge of NaCl tree 2014-02-27 20:37:00 -05:00
esc.c cmd/gc: fix escape analysis for slice of array 2014-05-12 14:45:05 -04:00
export.c cmd/gc: implement -pack flag 2013-12-17 21:43:33 -05:00
fmt.c cmd/gc: shorten more temporary lifetimes 2014-04-01 20:02:54 -04:00
gen.c cmd/gc: alias more variables during register allocation 2014-05-12 17:10:36 -04:00
go.errors cmd/gc: better error messages for C-style if statements. 2013-08-19 11:49:59 +10:00
go.h cmd/gc: alias more variables during register allocation 2014-05-12 17:10:36 -04:00
go.y cmd/gc: fix spurious "bad negated constant" for complex constants. 2014-04-01 02:55:38 -04:00
init.c cmd/gc: do not generate code for var _ = ... unless necessary 2012-12-30 12:01:53 -05:00
inl.c cmd/gc: allow append and complex builtins to accept 2-result call expression as first argument. 2014-03-05 14:16:21 -05:00
lex.c cmd/gc: avoid %L in error message 2014-04-20 11:02:01 +02:00
Makefile build: update Makefile to track source code dependencies better 2012-03-13 03:31:11 +08:00
md5.c cmd/gc, cmd/ld, runtime: compact liveness bitmaps 2014-04-02 16:49:27 -04:00
md5.h cmd/gc, cmd/ld, runtime: compact liveness bitmaps 2014-04-02 16:49:27 -04:00
mkbuiltin cmd/gc: update runtime.go for new map implementation. 2013-03-27 21:51:07 +01:00
mkbuiltin1.c cmd/gc: silence clang warning 2013-10-29 11:50:18 -04:00
mkopnames gc: use octal escapes in mkopnames 2012-01-31 18:15:42 -08:00
mparith1.c cmd/gc: round floats with a large negative exponent towards zero 2014-03-24 10:10:29 -07:00
mparith2.c cmd/gc: avoid confusing error message "ovf in mpaddxx" 2014-04-09 08:36:27 +02:00
mparith3.c cmd/gc: check exponent overflow and underflow in mparith 2014-03-19 05:48:00 +01:00
obj.c liblink, cmd/gc, cmd/{5,6,8}{a,c}: rename linkwriteobj to writeobj 2014-04-16 14:36:44 -07:00
order.c cmd/gc: fix two select temporary bugs 2014-05-15 19:16:18 -04:00
pgen.c cmd/gc: fix out of bounds access 2014-05-14 19:24:00 +04:00
plive.c cmd/8g: fix liveness for 387 build (including plan9) 2014-04-06 10:30:02 -04:00
popt.c cmd/gc: shorten temporary lifetimes when possible 2014-04-01 13:31:38 -04:00
popt.h cmd/gc: eliminate redundant &x.Field nil checks 2013-09-17 16:54:22 -04:00
racewalk.c cmd/gc: shorten temporary lifetimes when possible 2014-04-01 13:31:38 -04:00
range.c cmd/gc: shorten even more temporary lifetimes 2014-04-02 14:09:42 -04:00
reflect.c runtime: make scan of pointer-in-interface same as scan of pointer 2014-05-15 15:53:36 -04:00
runtime.go cmd/gc, runtime: optimize map[string] lookup from []byte key 2014-04-03 19:05:17 -04:00
select.c cmd/gc: shorten even more temporary lifetimes 2014-04-02 14:09:42 -04:00
sinit.c cmd/gc: disable link-time copying of un-Go-initialized globals 2014-05-09 16:03:44 -04:00
subr.c cmd/gc: record line number for auto-generated wrappers as <autogenerated>:1 2014-05-12 11:59:55 -04:00
swt.c cmd/gc: reject incorrect use of fallthrough. 2014-02-19 07:55:03 +01:00
typecheck.c cmd/gc: fix duplicate map key check 2014-05-15 15:34:37 -04:00
unsafe.c cmd/gc: fix some overflows in the compiler 2013-04-29 22:44:40 -07:00
unsafe.go gc: delete old unsafe functions 2012-02-13 15:37:35 -05:00
walk.c cmd/gc: fix two select temporary bugs 2014-05-15 19:16:18 -04:00
y.tab.c cmd/gc: fix spurious "bad negated constant" for complex constants. 2014-04-01 02:55:38 -04:00
y.tab.h cmd/gc: fix spurious "bad negated constant" for complex constants. 2014-04-01 02:55:38 -04:00
yerr.h cmd/gc: qualified embedded fields with owner package. 2013-10-02 12:27:33 -04:00