On Sat, Sep 22, 2018 at 12:08 PM, marxin <mli...@suse.cz> wrote: > > gcc/go/ChangeLog: > > 2018-09-24 Martin Liska <mli...@suse.cz> > > * gofrontend/escape.cc (Gogo::analyze_escape): Remove > usage of a parameter. > (Gogo::assign_connectivity): Likewise. > (class Escape_analysis_tag): Likewise. > (Gogo::tag_function): Likewise. > * gofrontend/expressions.cc (Call_expression::do_type): Likewise. > * gofrontend/gogo.h (class Gogo): Likewise. > * gofrontend/types.cc (class Call_multiple_result_type): Likewise. > (Type::make_call_multiple_result_type): Likewise. > * gofrontend/types.h (class Type): Likewise. > * gofrontend/wb.cc (class Check_escape): Likewise. > (Gogo::add_write_barriers): Likewise.
HI, unfortunately this is wrong. As described in gcc/go/gofrontend/README, the files in that directory are mirrored from a separate repository (the same is true of the files in the libgo directory). You should not make changes to them directly in the GCC repository. I have reverted these changes, as follows. Sorry. Ian
Index: gcc/go/gofrontend/escape.cc =================================================================== --- gcc/go/gofrontend/escape.cc (revision 265293) +++ gcc/go/gofrontend/escape.cc (working copy) @@ -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*, 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 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* c 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* f // 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); } Index: gcc/go/gofrontend/expressions.cc =================================================================== --- gcc/go/gofrontend/expressions.cc (revision 265293) +++ gcc/go/gofrontend/expressions.cc (working copy) @@ -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; Index: gcc/go/gofrontend/gogo.h =================================================================== --- gcc/go/gofrontend/gogo.h (revision 265287) +++ gcc/go/gofrontend/gogo.h (working copy) @@ -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 Index: gcc/go/gofrontend/types.cc =================================================================== --- gcc/go/gofrontend/types.cc (revision 265293) +++ gcc/go/gofrontend/types.cc (working copy) @@ -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 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. Index: gcc/go/gofrontend/types.h =================================================================== --- gcc/go/gofrontend/types.h (revision 265293) +++ gcc/go/gofrontend/types.h (working copy) @@ -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); Index: gcc/go/gofrontend/wb.cc =================================================================== --- gcc/go/gofrontend/wb.cc (revision 265293) +++ gcc/go/gofrontend/wb.cc (working copy) @@ -189,8 +189,9 @@ Mark_address_taken::expression(Expressio 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); }