-
Notifications
You must be signed in to change notification settings - Fork 17.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmd/compile: fix half multiply issue
In walkdiv, an OMUL node was created and passed to typecheck, before the op was changed back to OHMUL. In some instances, the node that came back was an evaluated literal constant that occurred with a full multiply. The end result was a literal node with a non-shifted value and an OHMUL op. This change causes code to be generated for the OHMUL. Fixes #11358 Fixes #11369 Change-Id: If42a98c6830d07fe065d5ca57717704fb8cfbd33 Reviewed-on: https://go-review.googlesource.com/11400 Reviewed-by: Russ Cox <[email protected]>
- Loading branch information
Showing
4 changed files
with
31 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -524,6 +524,7 @@ OpSwitch: | |
OEQ, | ||
OGE, | ||
OGT, | ||
OHMUL, | ||
OLE, | ||
OLT, | ||
OLSH, | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
// run | ||
|
||
// Copyright 2015 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. | ||
|
||
// Test that the half multiply resulting from a division | ||
// by a constant generates correct code. | ||
|
||
package main | ||
|
||
func main() { | ||
var _ = 7 / "0"[0] // test case from #11369 | ||
var _ = 1 / "."[0] // test case from #11358 | ||
var x = 0 / "0"[0] | ||
var y = 48 / "0"[0] | ||
var z = 5 * 48 / "0"[0] | ||
if x != 0 { | ||
panic("expected 0") | ||
} | ||
if y != 1 { | ||
panic("expected 1") | ||
} | ||
if z != 5 { | ||
panic("expected 5") | ||
} | ||
} |