diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2010-12-09 23:56:47 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2010-12-09 23:56:47 +0000 |
commit | 3338038aaa74287563c93f08334397fa0ac4a85e (patch) | |
tree | 5814b73fb811a0528975bc30e08b5d13e7778715 /gcc | |
parent | d3de3f21fd3322b5b595946c35ef65dd441de7cd (diff) | |
download | gcc-3338038aaa74287563c93f08334397fa0ac4a85e.zip gcc-3338038aaa74287563c93f08334397fa0ac4a85e.tar.gz gcc-3338038aaa74287563c93f08334397fa0ac4a85e.tar.bz2 |
Avoid some crashes on erroneous programs.
From-SVN: r167670
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 9 | ||||
-rw-r--r-- | gcc/go/gofrontend/types.cc | 2 |
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 0387ee4..022f5ce 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -1146,7 +1146,11 @@ Func_expression::get_tree_without_closure(Gogo* gogo) } Named_object* no = this->function_; - tree id = this->function_->get_id(gogo); + + 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); @@ -1155,6 +1159,9 @@ Func_expression::get_tree_without_closure(Gogo* gogo) else gcc_unreachable(); + if (fndecl == error_mark_node) + return error_mark_node; + return build_fold_addr_expr_loc(this->location(), fndecl); } diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index b030a42..8d440a8 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -6864,6 +6864,8 @@ Named_type::do_get_tree(Gogo* gogo) t = make_node(RECORD_TYPE); this->named_tree_ = t; t = this->type_->interface_type()->fill_in_tree(gogo, t); + if (t == error_mark_node) + return error_mark_node; } break; |