From 10d53f5d111984f56ca2420ec2485637e8da8e01 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 4 Jan 2011 19:46:23 +0000 Subject: Don't crash initializing multiple vars from a single result function. From-SVN: r168482 --- gcc/go/gofrontend/expressions.cc | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'gcc/go') diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index f64e5ee..013adac 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -8898,10 +8898,16 @@ Call_result_expression::do_type() // Call_expression::do_must_eval_in_order when there is an error. Call_expression* ce = this->call_->call_expression(); if (ce == NULL) - return Type::make_error_type(); + { + this->set_is_error(); + return Type::make_error_type(); + } Function_type* fntype = ce->get_function_type(); if (fntype == NULL) - return Type::make_error_type(); + { + this->set_is_error(); + return Type::make_error_type(); + } const Typed_identifier_list* results = fntype->results(); if (results == NULL) { @@ -8952,7 +8958,11 @@ Call_result_expression::do_get_tree(Translate_context* context) tree call_tree = this->call_->get_tree(context); if (call_tree == error_mark_node) return error_mark_node; - gcc_assert(TREE_CODE(TREE_TYPE(call_tree)) == RECORD_TYPE); + if (TREE_CODE(TREE_TYPE(call_tree)) != RECORD_TYPE) + { + gcc_assert(saw_errors()); + return error_mark_node; + } tree field = TYPE_FIELDS(TREE_TYPE(call_tree)); for (unsigned int i = 0; i < this->index_; ++i) { -- cgit v1.1