summaryrefslogtreecommitdiff
path: root/src/cmd/gc/const.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/gc/const.c')
-rw-r--r--src/cmd/gc/const.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c
index 2188178a6..90eaff269 100644
--- a/src/cmd/gc/const.c
+++ b/src/cmd/gc/const.c
@@ -63,12 +63,16 @@ convlit(Node *n, Type *t)
break;
}
if(isfloat[et]) {
+ Mpint *xv;
+
// int to float
- if(mpcmpfltflt(n->val.u.fval, minfltval[et]) < 0)
+ xv = n->val.u.xval;
+ if(mpcmpfixflt(xv, minfltval[et]) < 0)
goto bad2;
- if(mpcmpfltflt(n->val.u.fval, maxfltval[et]) > 0)
+ if(mpcmpfixflt(xv, maxfltval[et]) > 0)
goto bad2;
- mpmovefixflt(n->val.u.fval, n->val.u.xval);
+ n->val.u.fval = mal(sizeof(*n->val.u.fval));
+ mpmovefixflt(n->val.u.fval, xv);
n->val.ctype = CTFLT;
break;
}
@@ -76,12 +80,16 @@ convlit(Node *n, Type *t)
case Wlitfloat:
if(isint[et]) {
+ Mpflt *fv;
+
// float to int
- if(mpcmpfixfix(n->val.u.xval, minintval[et]) < 0)
+ fv = n->val.u.fval;
+ if(mpcmpfltfix(fv, minintval[et]) < 0)
goto bad2;
- if(mpcmpfixfix(n->val.u.xval, maxintval[et]) > 0)
+ if(mpcmpfltfix(fv, maxintval[et]) > 0)
goto bad2;
- mpmovefltfix(n->val.u.xval, n->val.u.fval);
+ n->val.u.xval = mal(sizeof(*n->val.u.xval));
+ mpmovefltfix(n->val.u.xval, fv);
n->val.ctype = CTINT;
break;
}