]> Cypherpunks repositories - gostls13.git/commitdiff
gc: bug238
authorRuss Cox <rsc@golang.org>
Fri, 8 Jan 2010 08:01:03 +0000 (00:01 -0800)
committerRuss Cox <rsc@golang.org>
Fri, 8 Jan 2010 08:01:03 +0000 (00:01 -0800)
Fixes #471.

R=ken2
CC=golang-dev
https://golang.org/cl/181184

src/cmd/gc/const.c
src/cmd/gc/walk.c
test/bugs/bug238.go [deleted file]
test/fixedbugs/bug238.go [new file with mode: 0644]
test/golden.out

index 4575ff6da45c85c840e7193c0b72a299b1b1a8bc..895f264313be43a8a10fa6ce17b93f3b39ea853e 100644 (file)
@@ -186,6 +186,10 @@ convlit1(Node **np, Type *t, int explicit)
        return;
 
 bad:
+       if(!n->diag) {
+               yyerror("cannot convert %#N to type %T", n, t);
+               n->diag = 1;
+       }
        if(isideal(n->type)) {
                defaultlit(&n, T);
                *np = n;
index 587119c96fa2dba60b521df94838566eff34c379..211efaec94ac0d6b42f00373462d78a4424aff95 100644 (file)
@@ -180,8 +180,11 @@ walkdef(Node *n)
                        goto ret;
                }
                t = n->type;
-               if(t != T)
+               if(t != T) {
                        convlit(&e, t);
+                       if(!isint[t->etype] && !isfloat[t->etype] && t->etype != TSTRING)
+                               yyerror("invalid constant type %T", t);
+               }
                n->val = e->val;
                n->type = e->type;
                break;
diff --git a/test/bugs/bug238.go b/test/bugs/bug238.go
deleted file mode 100644 (file)
index a5737d6..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-// errchk $G -e $D/$F.go
-
-// Copyright 2009 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 case for issue 471. This file shouldn't compile.
-
-package main
-
-const a *int = 1        // ERROR "wrong|incompatible"
-const b [2]int = 2      // ERROR "wrong|incompatible"
-const c map[int]int = 3 // ERROR "wrong|incompatible"
-const d chan int = 4    // ERROR "wrong|incompatible"
-const e func() = 5      // ERROR "wrong|incompatible"
-const f struct{} = 6    // ERROR "wrong|incompatible"
-const g interface{} = 7 // ERROR "wrong|incompatible"
-
-func main() { println(a, b, c, d, e, f, g) }
diff --git a/test/fixedbugs/bug238.go b/test/fixedbugs/bug238.go
new file mode 100644 (file)
index 0000000..3ceacf5
--- /dev/null
@@ -0,0 +1,19 @@
+// errchk $G -e $D/$F.go
+
+// Copyright 2009 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 case for issue 471. This file shouldn't compile.
+
+package main
+
+const a *int = 1        // ERROR "convert|wrong|incompatible"
+const b [2]int = 2      // ERROR "convert|wrong|incompatible"
+const c map[int]int = 3 // ERROR "convert|wrong|incompatible"
+const d chan int = 4    // ERROR "convert|wrong|incompatible"
+const e func() = 5      // ERROR "convert|wrong|incompatible"
+const f struct{} = 6    // ERROR "convert|wrong|incompatible"
+const g interface{} = 7 // ERROR "constant|wrong|incompatible"
+
+func main() { println(a, b, c, d, e, f, g) }
index 0795adf44ee71f6b18460c883700e44ce2d21cc6..ae04f70bb3b0e6e58923ba500cae9aa21ab528e6 100644 (file)
@@ -144,18 +144,3 @@ throw: interface conversion
 panic PC=xxx
 
 == bugs/
-
-=========== bugs/bug219.go
-bugs/bug219.go:16: syntax error near if
-BUG: bug219
-
-=========== bugs/bug238.go
-BUG: errchk: command succeeded unexpectedly
-
-=========== bugs/bug239.go
-bugs/bug239.go:11: imported and not used: unsafe
-bugs/bug239.go:15: undefined: Sizeof
-BUG: bug239
-
-=========== bugs/bug240.go
-BUG: errchk: command succeeded unexpectedly