]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Avoid some crashes on erroneous programs.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 9 Dec 2010 23:56:47 +0000 (23:56 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 9 Dec 2010 23:56:47 +0000 (23:56 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@167670 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/expressions.cc
gcc/go/gofrontend/types.cc

index 0387ee4fd9f03d19343a297389a881c998be8f9e..022f5ce3f0d13fcd3f73d92021886eb27c24a491 100644 (file)
@@ -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);
 }
 
index b030a420fe04ca8ae6d2f348fcfe6f9d14786418..8d440a89d4a671baa54c41c966098938fa187b97 100644 (file)
@@ -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;