compiler: Fix some crashes on invalid code.
Fixes issue 7. From-SVN: r186929
This commit is contained in:
parent
fa06ad0d58
commit
69f232c5a1
2 changed files with 11 additions and 2 deletions
|
@ -9225,7 +9225,7 @@ Call_expression::set_results(Translate_context* context, tree call_tree)
|
|||
ref->set_is_lvalue();
|
||||
tree temp_tree = ref->get_tree(context);
|
||||
if (temp_tree == error_mark_node)
|
||||
continue;
|
||||
return error_mark_node;
|
||||
|
||||
tree val_tree = build3_loc(loc.gcc_location(), COMPONENT_REF,
|
||||
TREE_TYPE(field), call_tree, field, NULL_TREE);
|
||||
|
|
|
@ -5450,6 +5450,11 @@ Array_type::get_length_tree(Gogo* gogo)
|
|||
mpz_t 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();
|
||||
if (t == NULL)
|
||||
t = Type::lookup_integer_type("int");
|
||||
|
@ -6551,7 +6556,11 @@ bool
|
|||
Interface_type::is_identical(const Interface_type* t,
|
||||
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
|
||||
// have already been sorted.
|
||||
|
|
Loading…
Add table
Reference in a new issue