aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2018-10-18 23:02:27 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2018-10-18 23:02:27 +0000
commit8cc43cb40362b9120858264a853c0222c35fe7e7 (patch)
tree1bac7b3644e81e33e652af19554db46415c47971 /gcc
parent0799a08b5c6a2087de9512252be6d9192e92395a (diff)
downloadgcc-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.cc20
-rw-r--r--gcc/go/gofrontend/expressions.cc2
-rw-r--r--gcc/go/gofrontend/gogo.h2
-rw-r--r--gcc/go/gofrontend/types.cc13
-rw-r--r--gcc/go/gofrontend/types.h2
-rw-r--r--gcc/go/gofrontend/wb.cc10
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);
}