Commit d69eea11 by Ian Lance Taylor

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
parent f12021ed
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.
...@@ -2396,7 +2396,7 @@ class Complex_expression : public Expression ...@@ -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) ...@@ -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");
......
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