Commit ce1a1562 by Ian Lance Taylor

compiler: don't remove floating point conversion of typed constant

From-SVN: r193565
parent d761f9e6
...@@ -2962,6 +2962,46 @@ Type_conversion_expression::do_lower(Gogo*, Named_object*, ...@@ -2962,6 +2962,46 @@ Type_conversion_expression::do_lower(Gogo*, Named_object*,
{ {
if (!nc.set_type(type, true, location)) if (!nc.set_type(type, true, location))
return Expression::make_error(location); return Expression::make_error(location);
// Don't simply convert to or from a float or complex type
// with a different size. That may change the value.
Type* vtype = val->type();
if (vtype->is_abstract())
;
else if (type->float_type() != NULL)
{
if (vtype->float_type() != NULL)
{
if (type->float_type()->bits() != vtype->float_type()->bits())
return this;
}
else if (vtype->complex_type() != NULL)
{
if (type->float_type()->bits() * 2
!= vtype->complex_type()->bits())
return this;
}
}
else if (type->complex_type() != NULL)
{
if (vtype->complex_type() != NULL)
{
if (type->complex_type()->bits()
!= vtype->complex_type()->bits())
return this;
}
else if (vtype->float_type() != NULL)
{
if (type->complex_type()->bits()
!= vtype->float_type()->bits() * 2)
return this;
}
}
else if (vtype->float_type() != NULL)
return this;
else if (vtype->complex_type() != NULL)
return this;
return nc.expression(location); return nc.expression(location);
} }
} }
......
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