OSDN Git Service

Don't crash on erroneous result variable.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Dec 2010 22:26:39 +0000 (22:26 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Dec 2010 22:26:39 +0000 (22:26 +0000)
Fixes issue 1320.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@167573 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/gogo-tree.cc

index 41e621e..09f0d7c 100644 (file)
@@ -1550,14 +1550,18 @@ Function::build_tree(Gogo* gogo, Named_object* named_function)
       else if ((*p)->is_result_variable())
        {
          tree var_decl = (*p)->get_tree(gogo, named_function);
       else if ((*p)->is_result_variable())
        {
          tree var_decl = (*p)->get_tree(gogo, named_function);
-         if ((*p)->result_var_value()->is_in_heap())
+         if (var_decl != error_mark_node
+             && (*p)->result_var_value()->is_in_heap())
            {
              gcc_assert(TREE_CODE(var_decl) == INDIRECT_REF);
              var_decl = TREE_OPERAND(var_decl, 0);
            }
            {
              gcc_assert(TREE_CODE(var_decl) == INDIRECT_REF);
              var_decl = TREE_OPERAND(var_decl, 0);
            }
-         gcc_assert(TREE_CODE(var_decl) == VAR_DECL);
-         DECL_CHAIN(var_decl) = declare_vars;
-         declare_vars = var_decl;
+         if (var_decl != error_mark_node)
+           {
+             gcc_assert(TREE_CODE(var_decl) == VAR_DECL);
+             DECL_CHAIN(var_decl) = declare_vars;
+             declare_vars = var_decl;
+           }
        }
     }
   *pp = NULL_TREE;
        }
     }
   *pp = NULL_TREE;