Commit 340632e9 by Ian Lance Taylor

compiler: add types used by inline functions to export data

    
    Reviewed-on: https://go-review.googlesource.com/c/150069

From-SVN: r266531
parent 34ea9597
c11d9528a0846293e4d615c86fc773c97252fdce 21cf8069ceb078de54cc43ac25c9c89bd15cba56
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.
...@@ -290,6 +290,11 @@ Find_types_to_prepare::type(Type* type) ...@@ -290,6 +290,11 @@ Find_types_to_prepare::type(Type* type)
if (type->is_void_type()) if (type->is_void_type())
return TRAVERSE_SKIP_COMPONENTS; return TRAVERSE_SKIP_COMPONENTS;
// Skip abstract types. We should never see these in real code,
// only in things like const declarations.
if (type->is_abstract())
return TRAVERSE_SKIP_COMPONENTS;
if (!this->exp_->set_type_index(type)) if (!this->exp_->set_type_index(type))
{ {
// We've already seen this type. // We've already seen this type.
...@@ -367,7 +372,12 @@ Find_types_to_prepare::traverse_named_type(Named_type* nt) ...@@ -367,7 +372,12 @@ Find_types_to_prepare::traverse_named_type(Named_type* nt)
methods->begin_definitions(); methods->begin_definitions();
pm != methods->end_definitions(); pm != methods->end_definitions();
++pm) ++pm)
this->traverse_function((*pm)->func_value()->type()); {
Function* fn = (*pm)->func_value();
this->traverse_function(fn->type());
if (fn->export_for_inlining())
fn->block()->traverse(this);
}
for (Bindings::const_declarations_iterator pm = for (Bindings::const_declarations_iterator pm =
methods->begin_declarations(); methods->begin_declarations();
...@@ -434,7 +444,12 @@ Export::prepare_types(const std::vector<Named_object*>* exports, ...@@ -434,7 +444,12 @@ Export::prepare_types(const std::vector<Named_object*>* exports,
break; break;
case Named_object::NAMED_OBJECT_FUNC: case Named_object::NAMED_OBJECT_FUNC:
find.traverse_function(no->func_value()->type()); {
Function* fn = no->func_value();
find.traverse_function(fn->type());
if (fn->export_for_inlining())
fn->block()->traverse(&find);
}
break; break;
case Named_object::NAMED_OBJECT_FUNC_DECLARATION: case Named_object::NAMED_OBJECT_FUNC_DECLARATION:
......
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