diff options
Diffstat (limited to 'src/cmd/gc')
-rw-r--r-- | src/cmd/gc/const.c | 4 | ||||
-rw-r--r-- | src/cmd/gc/walk.c | 5 |
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; |