summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-01-08 00:01:03 -0800
committerRuss Cox <rsc@golang.org>2010-01-08 00:01:03 -0800
commitae4521437ec67ddf414d2d3638af5ce6a2a5078c (patch)
treea97d9d80fc2eb2866d9b801e53e41935c9e00318 /src
parentda95e27cdba1b714ae6bd6559bf003745b097cae (diff)
downloadgolang-ae4521437ec67ddf414d2d3638af5ce6a2a5078c.tar.gz
gc: bug238
Fixes issue 471. R=ken2 CC=golang-dev http://codereview.appspot.com/181184
Diffstat (limited to 'src')
-rw-r--r--src/cmd/gc/const.c4
-rw-r--r--src/cmd/gc/walk.c5
2 files changed, 8 insertions, 1 deletions
diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c
index 4575ff6da..895f26431 100644
--- a/src/cmd/gc/const.c
+++ b/src/cmd/gc/const.c
@@ -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;
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c
index 587119c96..211efaec9 100644
--- a/src/cmd/gc/walk.c
+++ b/src/cmd/gc/walk.c
@@ -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;