Skip to content

Commit 9db29c2

Browse files
committed
[release-branch.go1.1] cmd/6g, cmd/8g: prevent constant propagation of non-constant LEA.
««« CL 10785043 / cf792c00f410 cmd/6g, cmd/8g: prevent constant propagation of non-constant LEA. Fixes #5809. R=golang-dev, dave, rsc, nigeltao CC=golang-dev https://golang.org/cl/10785043 »»» Update #5928 R=golang-dev, dave CC=golang-dev https://golang.org/cl/11515045
1 parent b82120b commit 9db29c2

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

src/cmd/6g/peep.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ peep(void)
152152
case ALEAQ:
153153
if(regtyp(&p->to))
154154
if(p->from.sym != S)
155+
if(p->from.index == D_NONE || p->from.index == D_CONST)
155156
conprop(r);
156157
break;
157158

src/cmd/8g/peep.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ peep(void)
145145
case ALEAL:
146146
if(regtyp(&p->to))
147147
if(p->from.sym != S)
148+
if(p->from.index == D_NONE || p->from.index == D_CONST)
148149
conprop(r);
149150
break;
150151

test/fixedbugs/issue5809.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// run
2+
3+
// Copyright 2013 The Go Authors. All rights reserved.
4+
// Use of this source code is governed by a BSD-style
5+
// license that can be found in the LICENSE file.
6+
7+
// issue 5809: 6g and 8g attempted to constant propagate indexed LEA
8+
9+
package main
10+
11+
import "fmt"
12+
13+
func main() {
14+
const d16 = "0123456789ABCDEF"
15+
k := 0x1234
16+
var x [4]byte
17+
18+
x[0] = d16[k>>12&0xf]
19+
x[1] = d16[k>>8&0xf]
20+
x[2] = d16[k>>4&0xf]
21+
x[3] = d16[k&0xf]
22+
23+
if x != [4]byte{'1','2','3','4'} {
24+
fmt.Println(x)
25+
panic("x != [4]byte{'1','2','3','4'}")
26+
}
27+
}

0 commit comments

Comments
 (0)