1
0
mirror of https://github.com/golang/go synced 2024-11-21 21:14:47 -07:00

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; return;
bad: bad:
if(!n->diag) {
yyerror("cannot convert %#N to type %T", n, t);
n->diag = 1;
}
if(isideal(n->type)) { if(isideal(n->type)) {
defaultlit(&n, T); defaultlit(&n, T);
*np = n; *np = n;

View File

@ -180,8 +180,11 @@ walkdef(Node *n)
goto ret; goto ret;
} }
t = n->type; t = n->type;
if(t != T) if(t != T) {
convlit(&e, 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->val = e->val;
n->type = e->type; n->type = e->type;
break; 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 panic PC=xxx
== bugs/ == 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