aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2010-12-15 23:40:15 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2010-12-15 23:40:15 +0000
commit81ef977e9e082ca9f23d64eaca9aa5d26a0a408f (patch)
tree265d208de839ddce619aa3a70047912d31655be7 /gcc
parentbd9c1f8f189c00662eaf588134b01bfbd424b87e (diff)
downloadgcc-81ef977e9e082ca9f23d64eaca9aa5d26a0a408f.zip
gcc-81ef977e9e082ca9f23d64eaca9aa5d26a0a408f.tar.gz
gcc-81ef977e9e082ca9f23d64eaca9aa5d26a0a408f.tar.bz2
Don't crash on empty struct created due to recursive reference.
From-SVN: r167881
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/expressions.cc8
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);