diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2018-10-18 23:02:27 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2018-10-18 23:02:27 +0000 |
commit | 8cc43cb40362b9120858264a853c0222c35fe7e7 (patch) | |
tree | 1bac7b3644e81e33e652af19554db46415c47971 /gcc | |
parent | 0799a08b5c6a2087de9512252be6d9192e92395a (diff) | |
download | gcc-8cc43cb40362b9120858264a853c0222c35fe7e7.zip gcc-8cc43cb40362b9120858264a853c0222c35fe7e7.tar.gz gcc-8cc43cb40362b9120858264a853c0222c35fe7e7.tar.bz2 |
Revert SVN revision 264561, incorrectly committed directly to the GCC
repo rather than to the master repo.
From-SVN: r265294
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/go/gofrontend/escape.cc | 20 | ||||
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/gogo.h | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/types.cc | 13 | ||||
-rw-r--r-- | gcc/go/gofrontend/types.h | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/wb.cc | 10 |
6 files changed, 32 insertions, 17 deletions
diff --git a/gcc/go/gofrontend/escape.cc b/gcc/go/gofrontend/escape.cc index eb23c2d..b56b4d0 100644 --- a/gcc/go/gofrontend/escape.cc +++ b/gcc/go/gofrontend/escape.cc @@ -979,7 +979,7 @@ Gogo::analyze_escape() for (std::vector<Named_object*>::iterator fn = stack.begin(); fn != stack.end(); ++fn) - this->tag_function(*fn); + this->tag_function(context, *fn); if (this->debug_escape_level() != 0) { @@ -1232,10 +1232,10 @@ Escape_analysis_loop::statement(Block*, size_t*, Statement* s) class Escape_analysis_assign : public Traverse { public: - Escape_analysis_assign(Escape_context* context) + Escape_analysis_assign(Escape_context* context, Named_object* fn) : Traverse(traverse_statements | traverse_expressions), - context_(context) + context_(context), fn_(fn) { } // Model statements within a function as assignments and flows between nodes. @@ -1272,6 +1272,8 @@ public: private: // The escape context for this set of functions. Escape_context* context_; + // The current function being analyzed. + Named_object* fn_; }; // Helper function to detect self assignment like the following. @@ -2702,7 +2704,7 @@ Gogo::assign_connectivity(Escape_context* context, Named_object* fn) int save_depth = context->loop_depth(); context->set_loop_depth(1); - Escape_analysis_assign ea(context); + Escape_analysis_assign ea(context, fn); Function::Results* res = fn->func_value()->result_variables(); if (res != NULL) { @@ -3265,13 +3267,17 @@ Gogo::propagate_escape(Escape_context* context, Node* dst) class Escape_analysis_tag { public: - Escape_analysis_tag() + Escape_analysis_tag(Escape_context* context) + : context_(context) { } // Add notes to the function's type about the escape information of its // input parameters. void tag(Named_object* fn); + + private: + Escape_context* context_; }; void @@ -3379,9 +3385,9 @@ Escape_analysis_tag::tag(Named_object* fn) // retain analysis results across imports. void -Gogo::tag_function(Named_object* fn) +Gogo::tag_function(Escape_context* context, Named_object* fn) { - Escape_analysis_tag eat; + Escape_analysis_tag eat(context); eat.tag(fn); } diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 0a6910a..e1feb66 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -10108,7 +10108,7 @@ Call_expression::do_type() else if (results->size() == 1) ret = results->begin()->type(); else - ret = Type::make_call_multiple_result_type(); + ret = Type::make_call_multiple_result_type(this); this->type_ = ret; diff --git a/gcc/go/gofrontend/gogo.h b/gcc/go/gofrontend/gogo.h index 07d08c2..0864ee1 100644 --- a/gcc/go/gofrontend/gogo.h +++ b/gcc/go/gofrontend/gogo.h @@ -680,7 +680,7 @@ class Gogo // Add notes about the escape level of a function's input and output // parameters for exporting and importing top level functions. void - tag_function(Named_object*); + tag_function(Escape_context*, Named_object*); // Reclaim memory of escape analysis Nodes. void diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index bb90e92..e368ee0 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -5441,8 +5441,9 @@ Type::make_nil_type() class Call_multiple_result_type : public Type { public: - Call_multiple_result_type() - : Type(TYPE_CALL_MULTIPLE_RESULT) + Call_multiple_result_type(Call_expression* call) + : Type(TYPE_CALL_MULTIPLE_RESULT), + call_(call) { } protected: @@ -5475,14 +5476,18 @@ class Call_multiple_result_type : public Type void do_mangled_name(Gogo*, std::string*) const { go_assert(saw_errors()); } + + private: + // The expression being called. + Call_expression* call_; }; // Make a call result type. Type* -Type::make_call_multiple_result_type() +Type::make_call_multiple_result_type(Call_expression* call) { - return new Call_multiple_result_type(); + return new Call_multiple_result_type(call); } // Class Struct_field. diff --git a/gcc/go/gofrontend/types.h b/gcc/go/gofrontend/types.h index 9e3f2f3..8d0faad 100644 --- a/gcc/go/gofrontend/types.h +++ b/gcc/go/gofrontend/types.h @@ -511,7 +511,7 @@ class Type make_nil_type(); static Type* - make_call_multiple_result_type(); + make_call_multiple_result_type(Call_expression*); static Struct_type* make_struct_type(Struct_field_list* fields, Location); diff --git a/gcc/go/gofrontend/wb.cc b/gcc/go/gofrontend/wb.cc index 3f0a89f..ccd318d 100644 --- a/gcc/go/gofrontend/wb.cc +++ b/gcc/go/gofrontend/wb.cc @@ -189,8 +189,9 @@ Mark_address_taken::expression(Expression** pexpr) class Check_escape : public Traverse { public: - Check_escape() - : Traverse(traverse_expressions | traverse_variables) + Check_escape(Gogo* gogo) + : Traverse(traverse_expressions | traverse_variables), + gogo_(gogo) { } int @@ -198,6 +199,9 @@ class Check_escape : public Traverse int variable(Named_object*); + + private: + Gogo* gogo_; }; int @@ -617,7 +621,7 @@ Gogo::add_write_barriers() { this->propagate_writebarrierrec(); - Check_escape chk; + Check_escape chk(this); this->traverse(&chk); } |