Commit 18890eeb authored by Russ Cox's avatar Russ Cox

fix bug154; tweak bug153 exit status

R=ken
OCL=29448
CL=29448
parent 5f460b38
...@@ -13,16 +13,20 @@ static Val copyval(Val); ...@@ -13,16 +13,20 @@ static Val copyval(Val);
/* /*
* truncate float literal fv to 32-bit or 64-bit precision * truncate float literal fv to 32-bit or 64-bit precision
* according to type. * according to type; return truncated value.
*/ */
void Mpflt*
truncfltlit(Mpflt *fv, Type *t) truncfltlit(Mpflt *oldv, Type *t)
{ {
double d; double d;
float f; float f;
Mpflt *fv;
if(t == T) if(t == T)
return; return oldv;
fv = mal(sizeof *fv);
*fv = *oldv;
// convert large precision literal floating // convert large precision literal floating
// into limited precision (float64 or float32) // into limited precision (float64 or float32)
...@@ -41,6 +45,7 @@ truncfltlit(Mpflt *fv, Type *t) ...@@ -41,6 +45,7 @@ truncfltlit(Mpflt *fv, Type *t)
mpmovecflt(fv, d); mpmovecflt(fv, d);
break; break;
} }
return fv;
} }
/* /*
...@@ -154,7 +159,7 @@ convlit1(Node *n, Type *t, int explicit) ...@@ -154,7 +159,7 @@ convlit1(Node *n, Type *t, int explicit)
else if(ct != CTFLT) else if(ct != CTFLT)
goto bad; goto bad;
overflow(n->val, t); overflow(n->val, t);
truncfltlit(n->val.u.fval, t); n->val.u.fval = truncfltlit(n->val.u.fval, t);
} else if(et == TSTRING && ct == CTINT && explicit) } else if(et == TSTRING && ct == CTINT && explicit)
n->val = tostr(n->val); n->val = tostr(n->val);
else else
...@@ -607,7 +612,7 @@ ret: ...@@ -607,7 +612,7 @@ ret:
// truncate precision for non-ideal float. // truncate precision for non-ideal float.
if(v.ctype == CTFLT && n->type->etype != TIDEAL) if(v.ctype == CTFLT && n->type->etype != TIDEAL)
truncfltlit(v.u.fval, n->type); n->val.u.fval = truncfltlit(v.u.fval, n->type);
return; return;
settrue: settrue:
......
...@@ -112,13 +112,6 @@ BUG: should compile ...@@ -112,13 +112,6 @@ BUG: should compile
BUG: errchk: bugs/bug153.go:9: error message does not match 'nil' BUG: errchk: bugs/bug153.go:9: error message does not match 'nil'
bugs/bug153.go:9: fatal error: dowidth: unknown type: E-34 bugs/bug153.go:9: fatal error: dowidth: unknown type: E-34
=========== bugs/bug154.go
r0 = 3.141592
r1 = 3.141592025756836
r0 and r1 should be the same
panic PC=xxx
BUG: should not panic
=========== fixedbugs/bug016.go =========== fixedbugs/bug016.go
fixedbugs/bug016.go:7: constant -3 overflows uint fixedbugs/bug016.go:7: constant -3 overflows uint
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment