gc: bug238

Fixes #471.

R=ken2
CC=golang-dev
https://golang.org/cl/181184
This commit is contained in:
Russ Cox 2010-01-08 00:01:03 -08:00
parent 1b1f39eb86
commit 307a899d5b
5 changed files with 27 additions and 35 deletions

View 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;

View 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;

View file

@ -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) }

19
test/fixedbugs/bug238.go Normal file
View file

@ -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) }

View 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