mirror of
https://github.com/golang/go
synced 2024-11-22 00:24:41 -07:00
add & fix bug207: rewritten if condition
was discarding initialization work. R=ken OCL=35454 CL=35457
This commit is contained in:
parent
d515063588
commit
55edf49a01
@ -356,7 +356,7 @@ walkstmt(Node **np)
|
|||||||
walkstmtlist(n->ninit);
|
walkstmtlist(n->ninit);
|
||||||
if(n->ntest != N) {
|
if(n->ntest != N) {
|
||||||
walkstmtlist(n->ntest->ninit);
|
walkstmtlist(n->ntest->ninit);
|
||||||
walkexpr(&n->ntest, &n->ntest->ninit);
|
walkexpr(&n->ntest, &n->ninit);
|
||||||
}
|
}
|
||||||
walkstmt(&n->nincr);
|
walkstmt(&n->nincr);
|
||||||
walkstmtlist(n->nbody);
|
walkstmtlist(n->nbody);
|
||||||
@ -364,7 +364,7 @@ walkstmt(Node **np)
|
|||||||
|
|
||||||
case OIF:
|
case OIF:
|
||||||
walkstmtlist(n->ninit);
|
walkstmtlist(n->ninit);
|
||||||
walkexpr(&n->ntest, &n->ntest->ninit);
|
walkexpr(&n->ntest, &n->ninit);
|
||||||
walkstmtlist(n->nbody);
|
walkstmtlist(n->nbody);
|
||||||
walkstmtlist(n->nelse);
|
walkstmtlist(n->nelse);
|
||||||
break;
|
break;
|
||||||
@ -455,6 +455,13 @@ walkexpr(Node **np, NodeList **init)
|
|||||||
if(n == N)
|
if(n == N)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if(init == &n->ninit) {
|
||||||
|
// not okay to use n->ninit when walking n,
|
||||||
|
// because we might replace n with some other node
|
||||||
|
// and would lose the init list.
|
||||||
|
fatal("walkexpr init == &n->ninit");
|
||||||
|
}
|
||||||
|
|
||||||
// annoying case - not typechecked
|
// annoying case - not typechecked
|
||||||
if(n->op == OKEY) {
|
if(n->op == OKEY) {
|
||||||
walkexpr(&n->left, init);
|
walkexpr(&n->left, init);
|
||||||
|
23
test/fixedbugs/bug207.go
Normal file
23
test/fixedbugs/bug207.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// $G $D/$F.go && $L $F.$A && ./$A.out
|
||||||
|
|
||||||
|
// Copyright 2009 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.
|
||||||
|
|
||||||
|
// used to panic because 6g didn't generate
|
||||||
|
// the code to fill in the ... argument to fmt.Sprint.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
type T struct {
|
||||||
|
a, b, c, d, e []int;
|
||||||
|
}
|
||||||
|
|
||||||
|
var t T
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
if fmt.Sprint("xxx", t) != "yyy" {
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user