mirror of
https://github.com/golang/go
synced 2024-11-21 15:24:45 -07:00
gc: small fixes for printing.
mark OADDR inserted by typecheck as implicit OCOPY takes ->left and ->right, not ->list OMAKE*'s can all have arguments precedence for OIND was initalized twice fixes #2414 R=rsc, dave CC=golang-dev https://golang.org/cl/5319065
This commit is contained in:
parent
ee24bfc058
commit
29a5ae657f
@ -921,7 +921,6 @@ static int opprec[] = {
|
||||
|
||||
[OINDEXMAP] = 8,
|
||||
[OINDEX] = 8,
|
||||
[OIND] = 8,
|
||||
[ODOTINTER] = 8,
|
||||
[ODOTMETH] = 8,
|
||||
[ODOTPTR] = 8,
|
||||
@ -1146,6 +1145,7 @@ exprfmt(Fmt *f, Node *n, int prec)
|
||||
exprfmt(f, n->left, nprec);
|
||||
return fmtprint(f, "[%N]", n->right);
|
||||
|
||||
case OCOPY:
|
||||
case OCOMPLEX:
|
||||
return fmtprint(f, "%#O(%N, %N)", n->op, n->left, n->right);
|
||||
|
||||
@ -1167,7 +1167,6 @@ exprfmt(Fmt *f, Node *n, int prec)
|
||||
case OCAP:
|
||||
case OCLOSE:
|
||||
case OLEN:
|
||||
case OCOPY:
|
||||
case OMAKE:
|
||||
case ONEW:
|
||||
case OPANIC:
|
||||
@ -1188,13 +1187,11 @@ exprfmt(Fmt *f, Node *n, int prec)
|
||||
return fmtprint(f, "(%,H...)", n->list);
|
||||
return fmtprint(f, "(%,H)", n->list);
|
||||
|
||||
case OMAKESLICE:
|
||||
if(count(n->list) > 2)
|
||||
return fmtprint(f, "make(%T, %N, %N)", n->type, n->left, n->right); // count list, but print l/r?
|
||||
return fmtprint(f, "make(%T, %N)", n->type, n->left);
|
||||
|
||||
case OMAKEMAP:
|
||||
case OMAKECHAN:
|
||||
case OMAKESLICE:
|
||||
if(n->list->next)
|
||||
return fmtprint(f, "make(%T, %,H)", n->type, n->list->next);
|
||||
return fmtprint(f, "make(%T)", n->type);
|
||||
|
||||
case OADD:
|
||||
|
@ -745,6 +745,7 @@ reswitch:
|
||||
defaultlit(&n->right->right, T);
|
||||
if(isfixedarray(n->left->type)) {
|
||||
n->left = nod(OADDR, n->left, N);
|
||||
n->left->implicit = 1;
|
||||
typecheck(&n->left, top);
|
||||
}
|
||||
if(n->right->left != N) {
|
||||
|
@ -148,7 +148,7 @@ func (b *Bar2) NoLeak() int { // ERROR "b does not escape"
|
||||
}
|
||||
|
||||
func (b *Bar2) Leak() []int { // ERROR "leaking param: b"
|
||||
return b.i[:] // ERROR "&b.i escapes to heap"
|
||||
return b.i[:] // ERROR "b.i escapes to heap"
|
||||
}
|
||||
|
||||
func (b *Bar2) AlsoNoLeak() []int { // ERROR "b does not escape"
|
||||
@ -156,12 +156,12 @@ func (b *Bar2) AlsoNoLeak() []int { // ERROR "b does not escape"
|
||||
}
|
||||
|
||||
func (b *Bar2) LeakSelf() { // ERROR "leaking param: b"
|
||||
b.ii = b.i[0:4] // ERROR "&b.i escapes to heap"
|
||||
b.ii = b.i[0:4] // ERROR "b.i escapes to heap"
|
||||
}
|
||||
|
||||
func (b *Bar2) LeakSelf2() { // ERROR "leaking param: b"
|
||||
var buf []int
|
||||
buf = b.i[0:] // ERROR "&b.i escapes to heap"
|
||||
buf = b.i[0:] // ERROR "b.i escapes to heap"
|
||||
b.ii = buf
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user