aboutsummaryrefslogtreecommitdiff
path: root/gcc/go/gofrontend/expressions.cc
diff options
context:
space:
mode:
authorChris Manghane <cmang@google.com>2013-10-11 03:15:33 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2013-10-11 03:15:33 +0000
commitf7191ecdbd3adad32b561db40fac6978df6409fe (patch)
tree5f41fdf78ab663a67c63db5beabf5b7175f799ba /gcc/go/gofrontend/expressions.cc
parentcf5e3504b55071f73420c3ab7756200b1dad7b7a (diff)
downloadgcc-f7191ecdbd3adad32b561db40fac6978df6409fe.zip
gcc-f7191ecdbd3adad32b561db40fac6978df6409fe.tar.gz
gcc-f7191ecdbd3adad32b561db40fac6978df6409fe.tar.bz2
compiler: Use backend interface for function declarations.
* go-gcc.cc (Backend::error_function): New function. (Backend::function): New function. (Backend::make_function): New function. (function_to_tree): New function. From-SVN: r203403
Diffstat (limited to 'gcc/go/gofrontend/expressions.cc')
-rw-r--r--gcc/go/gofrontend/expressions.cc18
1 files changed, 4 insertions, 14 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index 0647a50..37f8822 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -1240,15 +1240,11 @@ Func_expression::get_code_pointer(Gogo* gogo, Named_object* no, Location loc)
return error_mark_node;
}
- tree id = no->get_id(gogo);
- if (id == error_mark_node)
- return error_mark_node;
-
tree fndecl;
if (no->is_function())
- fndecl = no->func_value()->get_or_make_decl(gogo, no, id);
+ fndecl = no->func_value()->get_or_make_decl(gogo, no);
else if (no->is_function_declaration())
- fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no, id);
+ fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no);
else
go_unreachable();
@@ -9825,14 +9821,8 @@ Call_expression::do_get_tree(Translate_context* context)
}
tree fntype_tree = type_to_tree(fntype->get_backend(gogo));
- if (fntype_tree == error_mark_node)
- return error_mark_node;
- go_assert(POINTER_TYPE_P(fntype_tree));
- if (TREE_TYPE(fntype_tree) == error_mark_node)
- return error_mark_node;
- go_assert(TREE_CODE(TREE_TYPE(fntype_tree)) == RECORD_TYPE);
- tree fnfield_type = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(fntype_tree)));
- if (fnfield_type == error_mark_node)
+ tree fnfield_type = type_to_tree(fntype->get_backend_fntype(gogo));
+ if (fntype_tree == error_mark_node || fnfield_type == error_mark_node)
return error_mark_node;
go_assert(FUNCTION_POINTER_TYPE_P(fnfield_type));
tree rettype = TREE_TYPE(TREE_TYPE(fnfield_type));