Commit 69f232c5 by Ian Lance Taylor

compiler: Fix some crashes on invalid code.

Fixes issue 7.

From-SVN: r186929
parent fa06ad0d
...@@ -9225,7 +9225,7 @@ Call_expression::set_results(Translate_context* context, tree call_tree) ...@@ -9225,7 +9225,7 @@ Call_expression::set_results(Translate_context* context, tree call_tree)
ref->set_is_lvalue(); ref->set_is_lvalue();
tree temp_tree = ref->get_tree(context); tree temp_tree = ref->get_tree(context);
if (temp_tree == error_mark_node) if (temp_tree == error_mark_node)
continue; return error_mark_node;
tree val_tree = build3_loc(loc.gcc_location(), COMPONENT_REF, tree val_tree = build3_loc(loc.gcc_location(), COMPONENT_REF,
TREE_TYPE(field), call_tree, field, NULL_TREE); TREE_TYPE(field), call_tree, field, NULL_TREE);
......
...@@ -5450,6 +5450,11 @@ Array_type::get_length_tree(Gogo* gogo) ...@@ -5450,6 +5450,11 @@ Array_type::get_length_tree(Gogo* gogo)
mpz_t val; mpz_t val;
if (this->length_->numeric_constant_value(&nc) && nc.to_int(&val)) if (this->length_->numeric_constant_value(&nc) && nc.to_int(&val))
{ {
if (mpz_sgn(val) < 0)
{
this->length_tree_ = error_mark_node;
return this->length_tree_;
}
Type* t = nc.type(); Type* t = nc.type();
if (t == NULL) if (t == NULL)
t = Type::lookup_integer_type("int"); t = Type::lookup_integer_type("int");
...@@ -6551,7 +6556,11 @@ bool ...@@ -6551,7 +6556,11 @@ bool
Interface_type::is_identical(const Interface_type* t, Interface_type::is_identical(const Interface_type* t,
bool errors_are_identical) const bool errors_are_identical) const
{ {
go_assert(this->methods_are_finalized_ && t->methods_are_finalized_); // If methods have not been finalized, then we are asking whether
// func redeclarations are the same. This is an error, so for
// simplicity we say they are never the same.
if (!this->methods_are_finalized_ || !t->methods_are_finalized_)
return false;
// We require the same methods with the same types. The methods // We require the same methods with the same types. The methods
// have already been sorted. // have already been sorted.
......
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