From ae4521437ec67ddf414d2d3638af5ce6a2a5078c Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Fri, 8 Jan 2010 00:01:03 -0800 Subject: gc: bug238 Fixes issue 471. R=ken2 CC=golang-dev http://codereview.appspot.com/181184 --- src/cmd/gc/const.c | 4 ++++ src/cmd/gc/walk.c | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src') 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; -- cgit v1.2.3