summaryrefslogtreecommitdiff
path: root/src/cmd/gc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/gc')
-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;