nc := Nod(OXXX, nil, nil)
Nodconst(nc, nl.Type, int64(m.Um))
- n1 := Nod(OMUL, nl, nc)
+ n1 := Nod(OHMUL, nl, nc)
typecheck(&n1, Erv)
- n1.Op = OHMUL
if m.Ua != 0 {
// Select a Go type with (at least) twice the width.
var twide *Type
nc := Nod(OXXX, nil, nil)
Nodconst(nc, nl.Type, m.Sm)
- n1 := Nod(OMUL, nl, nc)
+ n1 := Nod(OHMUL, nl, nc)
typecheck(&n1, Erv)
- n1.Op = OHMUL
if m.Sm < 0 {
// add the numerator.
n1 = Nod(OADD, n1, nl)
--- /dev/null
+// 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")
+ }
+}