mirror of https://github.com/golang/go.git
cmd/gc: avoid passing unevaluated constant expressions to backends.
Backends do not exactly expect receiving binary operators with constant operands or use workarounds to move them to register/stack in order to handle them. Fixes #5841. R=golang-dev, daniel.morsing, rsc CC=golang-dev https://golang.org/cl/11107044
This commit is contained in:
parent
c0a4ce52c6
commit
d7c99cdf9f
|
|
@ -1379,6 +1379,13 @@ walkexpr(Node **np, NodeList **init)
|
|||
fatal("missing switch %O", n->op);
|
||||
|
||||
ret:
|
||||
// Expressions that are constant at run time but not
|
||||
// considered const by the language spec are not turned into
|
||||
// constants until walk. For example, if n is y%1 == 0, the
|
||||
// walk of y%1 may have replaced it by 0.
|
||||
// Check whether n with its updated args is itself now a constant.
|
||||
evconst(n);
|
||||
|
||||
ullmancalc(n);
|
||||
|
||||
if(debug['w'] && n != N)
|
||||
|
|
|
|||
|
|
@ -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 5841: 8g produces invalid CMPL $0, $0.
|
||||
// Similar to issue 5002, used to fail at link time.
|
||||
|
||||
package main
|
||||
|
||||
func main() {
|
||||
var y int
|
||||
if y%1 == 0 {
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue