mirror of
https://github.com/golang/go
synced 2024-11-21 23:14:40 -07:00
bug159
R=ken OCL=32902 CL=32914
This commit is contained in:
parent
c12ccabb9c
commit
6be0f50b97
@ -1868,6 +1868,7 @@ reorder1(NodeList *all)
|
|||||||
* simultaneous assignment. there cannot
|
* simultaneous assignment. there cannot
|
||||||
* be later use of an earlier lvalue.
|
* be later use of an earlier lvalue.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int
|
int
|
||||||
vmatch2(Node *l, Node *r)
|
vmatch2(Node *l, Node *r)
|
||||||
{
|
{
|
||||||
@ -1908,7 +1909,18 @@ vmatch1(Node *l, Node *r)
|
|||||||
return 0;
|
return 0;
|
||||||
switch(l->op) {
|
switch(l->op) {
|
||||||
case ONAME:
|
case ONAME:
|
||||||
// match each left with all rights
|
switch(l->class) {
|
||||||
|
case PPARAM:
|
||||||
|
case PPARAMREF:
|
||||||
|
case PAUTO:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// assignment to non-stack variable
|
||||||
|
// must be delayed if right has function calls.
|
||||||
|
if(r->ullman >= UINF)
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
return vmatch2(l, r);
|
return vmatch2(l, r);
|
||||||
case OLITERAL:
|
case OLITERAL:
|
||||||
return 0;
|
return 0;
|
||||||
@ -1937,6 +1949,7 @@ reorder3(NodeList *all)
|
|||||||
n2 = l2->n;
|
n2 = l2->n;
|
||||||
if(c2 > c1) {
|
if(c2 > c1) {
|
||||||
if(vmatch1(n1->left, n2->right)) {
|
if(vmatch1(n1->left, n2->right)) {
|
||||||
|
// delay assignment to n1->left
|
||||||
q = nod(OXXX, N, N);
|
q = nod(OXXX, N, N);
|
||||||
tempname(q, n1->right->type);
|
tempname(q, n1->right->type);
|
||||||
q = nod(OAS, n1->left, q);
|
q = nod(OAS, n1->left, q);
|
||||||
|
@ -147,10 +147,6 @@ BUG: compilation succeeds incorrectly
|
|||||||
=========== bugs/bug136.go
|
=========== bugs/bug136.go
|
||||||
BUG: errchk: command succeeded unexpectedly
|
BUG: errchk: command succeeded unexpectedly
|
||||||
|
|
||||||
=========== bugs/bug159.go
|
|
||||||
abc: expected 4 5 6 got 4 4 -4
|
|
||||||
BUG: bug159
|
|
||||||
|
|
||||||
=========== bugs/bug162.go
|
=========== bugs/bug162.go
|
||||||
123
|
123
|
||||||
BUG: should fail
|
BUG: should fail
|
||||||
|
@ -11,18 +11,19 @@ var a,b,c,d,e,f,g,h,i int;
|
|||||||
func
|
func
|
||||||
printit()
|
printit()
|
||||||
{
|
{
|
||||||
print(a,b,c,d,e,f,g,h,i,"\n");
|
println(a,b,c,d,e,f,g,h,i);
|
||||||
}
|
}
|
||||||
|
|
||||||
func
|
func
|
||||||
testit() bool
|
testit(permuteok bool) bool
|
||||||
{
|
{
|
||||||
if a+b+c+d+e+f+g+h+i != 45 {
|
if a+b+c+d+e+f+g+h+i != 45 {
|
||||||
print("sum does not add to 45\n");
|
print("sum does not add to 45\n");
|
||||||
printit();
|
printit();
|
||||||
panic();
|
return false;
|
||||||
}
|
}
|
||||||
return a == 1 &&
|
return permuteok ||
|
||||||
|
a == 1 &&
|
||||||
b == 2 &&
|
b == 2 &&
|
||||||
c == 3 &&
|
c == 3 &&
|
||||||
d == 4 &&
|
d == 4 &&
|
||||||
@ -51,22 +52,19 @@ main()
|
|||||||
h = 8;
|
h = 8;
|
||||||
i = 9;
|
i = 9;
|
||||||
|
|
||||||
if !testit() { panic("init val\n"); }
|
if !testit(false) { panic("init val\n"); }
|
||||||
|
|
||||||
for z:=0; z<100; z++ {
|
for z:=0; z<100; z++ {
|
||||||
a,b,c,d, e,f,g,h,i = b,c,d,a, i,e,f,g,h;
|
a,b,c,d, e,f,g,h,i = b,c,d,a, i,e,f,g,h;
|
||||||
|
|
||||||
if testit() {
|
if !testit(z%20 != 19) {
|
||||||
if z == 19 {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
print("on ", z, "th iteration\n");
|
print("on ", z, "th iteration\n");
|
||||||
printit();
|
printit();
|
||||||
panic();
|
panic();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !testit() {
|
if !testit(false) {
|
||||||
print("final val\n");
|
print("final val\n");
|
||||||
printit();
|
printit();
|
||||||
panic();
|
panic();
|
||||||
@ -76,8 +74,9 @@ main()
|
|||||||
if a != 2 || b != 1 {
|
if a != 2 || b != 1 {
|
||||||
panic("bad swap");
|
panic("bad swap");
|
||||||
}
|
}
|
||||||
//BUG a, b = swap(swap(a, b));
|
|
||||||
// if a != 2 || b != 1 {
|
a, b = swap(swap(a, b));
|
||||||
// panic("bad swap");
|
if a != 2 || b != 1 {
|
||||||
// }
|
panic("bad swap");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user