diff options
author | Ken Thompson <ken@golang.org> | 2008-08-12 14:04:03 -0700 |
---|---|---|
committer | Ken Thompson <ken@golang.org> | 2008-08-12 14:04:03 -0700 |
commit | fc0fa45e28993ae1bf65b45778ecac529d6f19e3 (patch) | |
tree | eb95384b094b2775bd8422b06f93db178aaa721d /src/cmd/gc/const.c | |
parent | a138df45905f91f791ee7cceffff286fb4710915 (diff) | |
download | golang-fc0fa45e28993ae1bf65b45778ecac529d6f19e3.tar.gz |
fixed bugs in const/case
R=r
DELTA=138 (75 added, 12 deleted, 51 changed)
OCL=14129
CL=14131
Diffstat (limited to 'src/cmd/gc/const.c')
-rw-r--r-- | src/cmd/gc/const.c | 20 |
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; } |