Commit ce842ad6 by Ian Lance Taylor Committed by Ian Lance Taylor

compiler: Avoid some compiler crashes on invalid code.

	* go-gcc.cc (class Gcc_tree): Add set_tree method.
	(set_placeholder_pointer_type): When setting to a pointer to
	error, set to error_mark_node.

From-SVN: r184684
parent fc24bee9
2012-02-29 Ian Lance Taylor <iant@google.com>
* go-gcc.cc (class Gcc_tree): Add set_tree method.
(set_placeholder_pointer_type): When setting to a pointer to
error, set to error_mark_node.
2012-02-23 Richard Guenther <rguenther@suse.de>
* go-gcc.cc (Gcc_backend::placeholder_pointer_type): Use
......
......@@ -56,6 +56,10 @@ class Gcc_tree
get_tree() const
{ return this->t_; }
void
set_tree(tree t)
{ this->t_ = t; }
private:
tree t_;
};
......@@ -626,7 +630,7 @@ Gcc_backend::set_placeholder_pointer_type(Btype* placeholder,
tree tt = to_type->get_tree();
if (tt == error_mark_node)
{
TREE_TYPE(pt) = tt;
placeholder->set_tree(error_mark_node);
return false;
}
gcc_assert(TREE_CODE(tt) == POINTER_TYPE);
......
......@@ -13878,7 +13878,7 @@ tree
Heap_composite_expression::do_get_tree(Translate_context* context)
{
tree expr_tree = this->expr_->get_tree(context);
if (expr_tree == error_mark_node)
if (expr_tree == error_mark_node || TREE_TYPE(expr_tree) == error_mark_node)
return error_mark_node;
tree expr_size = TYPE_SIZE_UNIT(TREE_TYPE(expr_tree));
go_assert(TREE_CODE(expr_size) == INTEGER_CST);
......
......@@ -3948,8 +3948,9 @@ Parse::return_stat()
++p)
{
Named_object* no = this->gogo_->lookup((*p)->name(), NULL);
go_assert(no != NULL);
if (!no->is_result_variable())
if (no == NULL)
go_assert(saw_errors());
else if (!no->is_result_variable())
error_at(location, "%qs is shadowed during return",
(*p)->message_name().c_str());
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment