mirror of
https://github.com/golang/go
synced 2024-11-24 07:30:10 -07:00
gc: complex(0)
Fixes #1232. R=ken2 CC=golang-dev https://golang.org/cl/3621041
This commit is contained in:
parent
88cf5564fc
commit
9e26c4bd1a
@ -202,8 +202,6 @@ convlit1(Node **np, Type *t, int explicit)
|
|||||||
goto bad;
|
goto bad;
|
||||||
case CTFLT:
|
case CTFLT:
|
||||||
case CTINT:
|
case CTINT:
|
||||||
if(explicit)
|
|
||||||
goto bad;
|
|
||||||
n->val = tocplx(n->val);
|
n->val = tocplx(n->val);
|
||||||
break;
|
break;
|
||||||
case CTCPLX:
|
case CTCPLX:
|
||||||
@ -300,7 +298,7 @@ toflt(Val v)
|
|||||||
f = mal(sizeof(*f));
|
f = mal(sizeof(*f));
|
||||||
mpmovefltflt(f, &v.u.cval->real);
|
mpmovefltflt(f, &v.u.cval->real);
|
||||||
if(mpcmpfltc(&v.u.cval->imag, 0) != 0)
|
if(mpcmpfltc(&v.u.cval->imag, 0) != 0)
|
||||||
yyerror("constant %#F truncated to real", v.u.fval);
|
yyerror("constant %#F%+#Fi truncated to real", &v.u.cval->real, &v.u.cval->imag);
|
||||||
v.ctype = CTFLT;
|
v.ctype = CTFLT;
|
||||||
v.u.fval = f;
|
v.u.fval = f;
|
||||||
break;
|
break;
|
||||||
@ -324,9 +322,9 @@ toint(Val v)
|
|||||||
case CTCPLX:
|
case CTCPLX:
|
||||||
i = mal(sizeof(*i));
|
i = mal(sizeof(*i));
|
||||||
if(mpmovefltfix(i, &v.u.cval->real) < 0)
|
if(mpmovefltfix(i, &v.u.cval->real) < 0)
|
||||||
yyerror("constant %#F truncated to integer", v.u.fval);
|
yyerror("constant %#F%+#Fi truncated to integer", &v.u.cval->real, &v.u.cval->imag);
|
||||||
if(mpcmpfltc(&v.u.cval->imag, 0) != 0)
|
if(mpcmpfltc(&v.u.cval->imag, 0) != 0)
|
||||||
yyerror("constant %#F truncated to real", v.u.fval);
|
yyerror("constant %#F%+#Fi truncated to real", &v.u.cval->real, &v.u.cval->imag);
|
||||||
v.ctype = CTINT;
|
v.ctype = CTINT;
|
||||||
v.u.xval = i;
|
v.u.xval = i;
|
||||||
break;
|
break;
|
||||||
|
@ -475,6 +475,8 @@ Fconv(Fmt *fp)
|
|||||||
// for well in range, convert to double and use print's %g
|
// for well in range, convert to double and use print's %g
|
||||||
if(-900 < fvp->exp && fvp->exp < 900) {
|
if(-900 < fvp->exp && fvp->exp < 900) {
|
||||||
d = mpgetflt(fvp);
|
d = mpgetflt(fvp);
|
||||||
|
if(d >= 0 && (fp->flags & FmtSign))
|
||||||
|
fmtprint(fp, "+");
|
||||||
return fmtprint(fp, "%g", d);
|
return fmtprint(fp, "%g", d);
|
||||||
}
|
}
|
||||||
// TODO(rsc): for well out of range, print
|
// TODO(rsc): for well out of range, print
|
||||||
|
@ -22,6 +22,7 @@ func main() {
|
|||||||
c64 = cmplx(f32, f32)
|
c64 = cmplx(f32, f32)
|
||||||
c128 = cmplx(f64, f64)
|
c128 = cmplx(f64, f64)
|
||||||
|
|
||||||
|
_ = complex(0) // ok
|
||||||
_ = cmplx(f, f32) // ERROR "cmplx"
|
_ = cmplx(f, f32) // ERROR "cmplx"
|
||||||
_ = cmplx(f, f64) // ERROR "cmplx"
|
_ = cmplx(f, f64) // ERROR "cmplx"
|
||||||
_ = cmplx(f32, f) // ERROR "cmplx"
|
_ = cmplx(f32, f) // ERROR "cmplx"
|
||||||
|
Loading…
Reference in New Issue
Block a user