Commit f3fb416a by Ian Lance Taylor

compiler: Avoid crashes on erroneous input.

From-SVN: r184274
parent 65728e39
...@@ -126,7 +126,9 @@ class Backend ...@@ -126,7 +126,9 @@ class Backend
// Fill in a placeholder pointer type as a pointer. This takes a // Fill in a placeholder pointer type as a pointer. This takes a
// type returned by placeholder_pointer_type and arranges for it to // type returned by placeholder_pointer_type and arranges for it to
// point to to_type. Returns true on success, false on failure. // point to the type that TO_TYPE points to (that is, PLACEHOLDER
// becomes the same type as TO_TYPE). Returns true on success,
// false on failure.
virtual bool virtual bool
set_placeholder_pointer_type(Btype* placeholder, Btype* to_type) = 0; set_placeholder_pointer_type(Btype* placeholder, Btype* to_type) = 0;
......
...@@ -4180,6 +4180,11 @@ Variable::get_backend_variable(Gogo* gogo, Named_object* function, ...@@ -4180,6 +4180,11 @@ Variable::get_backend_variable(Gogo* gogo, Named_object* function,
package != NULL, package != NULL,
Gogo::is_hidden_name(name), Gogo::is_hidden_name(name),
this->location_); this->location_);
else if (function == NULL)
{
go_assert(saw_errors());
bvar = backend->error_variable();
}
else else
{ {
tree fndecl = function->func_value()->get_decl(); tree fndecl = function->func_value()->get_decl();
......
...@@ -3595,7 +3595,7 @@ Pointer_type::do_hash_for_method(Gogo* gogo) const ...@@ -3595,7 +3595,7 @@ Pointer_type::do_hash_for_method(Gogo* gogo) const
return this->to_type_->hash_for_method(gogo) << 4; return this->to_type_->hash_for_method(gogo) << 4;
} }
// The tree for a pointer type. // Get the backend representation for a pointer type.
Btype* Btype*
Pointer_type::do_get_backend(Gogo* gogo) Pointer_type::do_get_backend(Gogo* gogo)
...@@ -5345,6 +5345,7 @@ Array_type::do_get_backend(Gogo* gogo) ...@@ -5345,6 +5345,7 @@ Array_type::do_get_backend(Gogo* gogo)
} }
// Return the backend representation of the element type. // Return the backend representation of the element type.
Btype* Btype*
Array_type::get_backend_element(Gogo* gogo) Array_type::get_backend_element(Gogo* gogo)
{ {
...@@ -7567,6 +7568,11 @@ Find_type_use::type(Type* type) ...@@ -7567,6 +7568,11 @@ Find_type_use::type(Type* type)
this->find_type_->add_dependency(type->named_type()); this->find_type_->add_dependency(type->named_type());
break; break;
case Type::TYPE_NAMED:
case Type::TYPE_FORWARD:
go_assert(saw_errors());
break;
case Type::TYPE_VOID: case Type::TYPE_VOID:
case Type::TYPE_SINK: case Type::TYPE_SINK:
case Type::TYPE_FUNCTION: case Type::TYPE_FUNCTION:
...@@ -7575,8 +7581,6 @@ Find_type_use::type(Type* type) ...@@ -7575,8 +7581,6 @@ Find_type_use::type(Type* type)
case Type::TYPE_MAP: case Type::TYPE_MAP:
case Type::TYPE_CHANNEL: case Type::TYPE_CHANNEL:
case Type::TYPE_INTERFACE: case Type::TYPE_INTERFACE:
case Type::TYPE_NAMED:
case Type::TYPE_FORWARD:
default: default:
go_unreachable(); go_unreachable();
} }
......
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