From: ian Date: Wed, 15 Feb 2012 14:33:45 +0000 (+0000) Subject: compiler: Avoid crashes on erroneous input. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9e7b8debd1f0105052ef156b5922a198e92720b7;p=thirdparty%2Fgcc.git compiler: Avoid crashes on erroneous input. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184274 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/go/gofrontend/backend.h b/gcc/go/gofrontend/backend.h index 2605ffef2b1b..d31404555e6a 100644 --- a/gcc/go/gofrontend/backend.h +++ b/gcc/go/gofrontend/backend.h @@ -126,7 +126,9 @@ class Backend // Fill in a placeholder pointer type as a pointer. This takes a // 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 set_placeholder_pointer_type(Btype* placeholder, Btype* to_type) = 0; diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc index fafd04fe18e5..a1b03ac0d708 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -4180,6 +4180,11 @@ Variable::get_backend_variable(Gogo* gogo, Named_object* function, package != NULL, Gogo::is_hidden_name(name), this->location_); + else if (function == NULL) + { + go_assert(saw_errors()); + bvar = backend->error_variable(); + } else { tree fndecl = function->func_value()->get_decl(); diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index 41bf491dff9e..1a35e54d9721 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -3595,7 +3595,7 @@ Pointer_type::do_hash_for_method(Gogo* gogo) const return this->to_type_->hash_for_method(gogo) << 4; } -// The tree for a pointer type. +// Get the backend representation for a pointer type. Btype* Pointer_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. + Btype* Array_type::get_backend_element(Gogo* gogo) { @@ -7567,6 +7568,11 @@ Find_type_use::type(Type* type) this->find_type_->add_dependency(type->named_type()); break; + case Type::TYPE_NAMED: + case Type::TYPE_FORWARD: + go_assert(saw_errors()); + break; + case Type::TYPE_VOID: case Type::TYPE_SINK: case Type::TYPE_FUNCTION: @@ -7575,8 +7581,6 @@ Find_type_use::type(Type* type) case Type::TYPE_MAP: case Type::TYPE_CHANNEL: case Type::TYPE_INTERFACE: - case Type::TYPE_NAMED: - case Type::TYPE_FORWARD: default: go_unreachable(); }