]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/8g: fix code generation of int64(0) == int64(0).
authorRémy Oudompheng <oudomphe@phare.normalesup.org>
Thu, 7 Mar 2013 20:47:45 +0000 (21:47 +0100)
committerRémy Oudompheng <oudomphe@phare.normalesup.org>
Thu, 7 Mar 2013 20:47:45 +0000 (21:47 +0100)
The code would violate the contract of cmp64.

Fixes #5002.

R=rsc, golang-dev
CC=golang-dev
https://golang.org/cl/7593043

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

index 0b2f2b76e93adbd9c14fc7e46734af08c9c4083a..f93be57e557f8b97b719f527ea8528d704f5fa13 100644 (file)
@@ -1055,7 +1055,7 @@ bgen(Node *n, int true, int likely, Prog *to)
                }
 
                if(is64(nr->type)) {
-                       if(!nl->addable) {
+                       if(!nl->addable || isconst(nl, CTINT)) {
                                tempname(&n1, nl->type);
                                cgen(nl, &n1);
                                nl = &n1;
diff --git a/test/fixedbugs/issue5002.go b/test/fixedbugs/issue5002.go
new file mode 100644 (file)
index 0000000..1e74fa1
--- /dev/null
@@ -0,0 +1,16 @@
+// build
+
+// Copyright 2013 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.
+
+// Issue 5002: 8g produces invalid CMPL $0, $0.
+// Used to fail at link time.
+
+package main
+
+func main() {
+       var y int64
+       if y%1 == 0 {
+       }
+}