compiler: Use context to determine types of complex expressions.

When determining the type of a complex expression, it is important
    to recognize cases where a complex value can be represented as a
    real number.
    
    Fixes golang/go#11572.
    
    Reviewed-on: https://go-review.googlesource.com/12541

From-SVN: r226596
This commit is contained in:
Ian Lance Taylor 2015-08-04 22:27:48 +00:00
parent f12021edbe
commit d69eea11a4
2 changed files with 3 additions and 4 deletions

View File

@ -1,4 +1,4 @@
bdd98c601f2c8dbd0bf821548ba09c038f7645c4
df080adb06f0e423820f3f6b9604b0c1093ff20a
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View File

@ -2396,7 +2396,7 @@ class Complex_expression : public Expression
void
do_dump_expression(Ast_dump_context*) const;
private:
// The complex value.
mpc_t val_;
@ -2423,8 +2423,7 @@ Complex_expression::do_determine_type(const Type_context* context)
{
if (this->type_ != NULL && !this->type_->is_abstract())
;
else if (context->type != NULL
&& context->type->complex_type() != NULL)
else if (context->type != NULL && context->type->is_numeric_type())
this->type_ = context->type;
else if (!context->may_be_abstract)
this->type_ = Type::lookup_complex_type("complex128");