diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2010-12-15 23:40:15 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2010-12-15 23:40:15 +0000 |
commit | 81ef977e9e082ca9f23d64eaca9aa5d26a0a408f (patch) | |
tree | 265d208de839ddce619aa3a70047912d31655be7 | |
parent | bd9c1f8f189c00662eaf588134b01bfbd424b87e (diff) | |
download | gcc-81ef977e9e082ca9f23d64eaca9aa5d26a0a408f.zip gcc-81ef977e9e082ca9f23d64eaca9aa5d26a0a408f.tar.gz gcc-81ef977e9e082ca9f23d64eaca9aa5d26a0a408f.tar.bz2 |
Don't crash on empty struct created due to recursive reference.
From-SVN: r167881
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 7de4ec9..844ff66 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -9628,7 +9628,13 @@ Field_reference_expression::do_get_tree(Translate_context* context) return error_mark_node; gcc_assert(TREE_CODE(TREE_TYPE(struct_tree)) == RECORD_TYPE); tree field = TYPE_FIELDS(TREE_TYPE(struct_tree)); - gcc_assert(field != NULL_TREE); + if (field == NULL_TREE) + { + // This can happen for a type which refers to itself indirectly + // and then turns out to be erroneous. + gcc_assert(saw_errors()); + return error_mark_node; + } for (unsigned int i = this->field_index_; i > 0; --i) { field = DECL_CHAIN(field); |