]> Cypherpunks repositories - gostls13.git/commitdiff
8g: out of register bug
authorRuss Cox <rsc@golang.org>
Tue, 25 May 2010 00:22:51 +0000 (17:22 -0700)
committerRuss Cox <rsc@golang.org>
Tue, 25 May 2010 00:22:51 +0000 (17:22 -0700)
Fixes #806.

R=ken2
CC=golang-dev
https://golang.org/cl/1281042

src/cmd/8g/cgen.c
test/fixedbugs/bug283.go [new file with mode: 0644]

index 77f9a9364e20abaef92c29180f8f302f8bd74475..cd70f5e17f85f833e6a4c3f5e7262a844f7c2c37 100644 (file)
@@ -10,6 +10,8 @@
 void
 mgen(Node *n, Node *n1, Node *rg)
 {
+       Node n2;
+
        n1->op = OEMPTY;
 
        if(n->addable) {
@@ -18,11 +20,13 @@ mgen(Node *n, Node *n1, Node *rg)
                        reg[n->val.u.reg]++;
                return;
        }
-       if(n->type->width > widthptr && !isfloat[n->type->etype])
-               tempname(n1, n->type);
-       else
-               regalloc(n1, n->type, rg);
+       tempname(n1, n->type);
        cgen(n, n1);
+       if(n->type->width <= widthptr || isfloat[n->type->etype]) {
+               n2 = *n1;
+               regalloc(n1, n->type, rg);
+               gmove(&n2, n1);
+       }
 }
 
 void
diff --git a/test/fixedbugs/bug283.go b/test/fixedbugs/bug283.go
new file mode 100644 (file)
index 0000000..45ee908
--- /dev/null
@@ -0,0 +1,19 @@
+// $G $D/$F.go || echo BUG: should compile
+
+// Copyright 2010 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.
+
+// http://code.google.com/p/go/issues/detail?id=806
+// triggered out of registers on 8g
+
+package main
+
+type Point struct {
+       x int
+       y int
+}
+
+func dist(p0, p1 Point) float64 {
+       return float64((p0.x-p1.x)*(p0.x-p1.x) + (p0.y-p1.y)*(p0.y-p1.y))
+}