author | Shawn Walker-Salas <shawn.walker@oracle.com> |
Thu, 14 Apr 2016 12:48:37 -0700 | |
changeset 5781 | ecbdf40c0a37 |
parent 5331 | 9c955076ffe3 |
permissions | -rw-r--r-- |
5331
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
1 |
From 29a22abfc8c81be7c3676f385fb0f2caf3029543 Mon Sep 17 00:00:00 2001 |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
2 |
From: Russ Cox <[email protected]> |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
3 |
Date: Tue, 17 Nov 2015 16:34:06 -0500 |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
4 |
Subject: [PATCH 49/63] [release-branch.go1.5] cmd/compile: fix Val vs Opt |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
5 |
collision |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
6 |
|
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
7 |
Fixes #12686. |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
8 |
|
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
9 |
Change-Id: I7a9f49dbd1f60b1d0240de57787753b425f9548c |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
10 |
Reviewed-on: https://go-review.googlesource.com/17031 |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
11 |
Reviewed-by: Ian Lance Taylor <[email protected]> |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
12 |
Reviewed-on: https://go-review.googlesource.com/17124 |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
13 |
--- |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
14 |
src/cmd/compile/internal/gc/const.go | 16 ++++++++++++---- |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
15 |
test/fixedbugs/issue12686.go | 16 ++++++++++++++++ |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
16 |
2 files changed, 28 insertions(+), 4 deletions(-) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
17 |
create mode 100644 test/fixedbugs/issue12686.go |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
18 |
|
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
19 |
diff --git a/src/cmd/compile/internal/gc/const.go b/src/cmd/compile/internal/gc/const.go |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
20 |
index 9eb4983..5095e5e 100644 |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
21 |
--- a/src/cmd/compile/internal/gc/const.go |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
22 |
+++ b/src/cmd/compile/internal/gc/const.go |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
23 |
@@ -1279,20 +1279,28 @@ func defaultlit(np **Node, t *Type) { |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
24 |
return |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
25 |
|
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
26 |
num: |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
27 |
+ // Note: n.Val().Ctype() can be CTxxx (not a constant) here |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
28 |
+ // in the case of an untyped non-constant value, like 1<<i. |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
29 |
+ v1 := n.Val() |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
30 |
if t != nil { |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
31 |
if Isint[t.Etype] { |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
32 |
t1 = t |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
33 |
- n.SetVal(toint(n.Val())) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
34 |
+ v1 = toint(n.Val()) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
35 |
} else if Isfloat[t.Etype] { |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
36 |
t1 = t |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
37 |
- n.SetVal(toflt(n.Val())) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
38 |
+ v1 = toflt(n.Val()) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
39 |
} else if Iscomplex[t.Etype] { |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
40 |
t1 = t |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
41 |
- n.SetVal(tocplx(n.Val())) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
42 |
+ v1 = tocplx(n.Val()) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
43 |
+ } |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
44 |
+ if n.Val().Ctype() != CTxxx { |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
45 |
+ n.SetVal(v1) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
46 |
} |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
47 |
} |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
48 |
|
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
49 |
- overflow(n.Val(), t1) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
50 |
+ if n.Val().Ctype() != CTxxx { |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
51 |
+ overflow(n.Val(), t1) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
52 |
+ } |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
53 |
Convlit(np, t1) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
54 |
lineno = int32(lno) |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
55 |
return |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
56 |
diff --git a/test/fixedbugs/issue12686.go b/test/fixedbugs/issue12686.go |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
57 |
new file mode 100644 |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
58 |
index 0000000..5783c99 |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
59 |
--- /dev/null |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
60 |
+++ b/test/fixedbugs/issue12686.go |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
61 |
@@ -0,0 +1,16 @@ |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
62 |
+// compile |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
63 |
+ |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
64 |
+// Copyright 2015 The Go Authors. All rights reserved. |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
65 |
+// Use of this source code is governed by a BSD-style |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
66 |
+// license that can be found in the LICENSE file. |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
67 |
+ |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
68 |
+// golang.org/issue/12686. |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
69 |
+// interesting because it's a non-constant but ideal value |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
70 |
+// and we used to incorrectly attach a constant Val to the Node. |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
71 |
+ |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
72 |
+package p |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
73 |
+ |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
74 |
+func f(i uint) uint { |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
75 |
+ x := []uint{1 << i} |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
76 |
+ return x[0] |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
77 |
+} |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
78 |
-- |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
79 |
2.6.1 |
9c955076ffe3
PSARC/2015/203 Google Go version 1.5
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
80 |