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 The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

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