From 42cbb8c17846290b82fd09ea79cab3e91454ba8d Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 14 Dec 2010 23:10:22 +0000 Subject: [PATCH] Don't crash on invalid closure. From-SVN: r167821 --- gcc/go/gofrontend/gogo-tree.cc | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/gcc/go/gofrontend/gogo-tree.cc b/gcc/go/gofrontend/gogo-tree.cc index d9bf69af0b5..67f9949f695 100644 --- a/gcc/go/gofrontend/gogo-tree.cc +++ b/gcc/go/gofrontend/gogo-tree.cc @@ -1313,14 +1313,19 @@ Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id) push_struct_function(decl); tree closure_decl = this->closure_var_->get_tree(gogo, no); + if (closure_decl == error_mark_node) + this->fndecl_ = error_mark_node; + else + { + DECL_ARTIFICIAL(closure_decl) = 1; + DECL_IGNORED_P(closure_decl) = 1; + TREE_USED(closure_decl) = 1; + DECL_ARG_TYPE(closure_decl) = TREE_TYPE(closure_decl); + TREE_READONLY(closure_decl) = 1; - DECL_ARTIFICIAL(closure_decl) = 1; - DECL_IGNORED_P(closure_decl) = 1; - TREE_USED(closure_decl) = 1; - DECL_ARG_TYPE(closure_decl) = TREE_TYPE(closure_decl); - TREE_READONLY(closure_decl) = 1; + DECL_STRUCT_FUNCTION(decl)->static_chain_decl = closure_decl; + } - DECL_STRUCT_FUNCTION(decl)->static_chain_decl = closure_decl; pop_cfun(); } } -- 2.30.2