Don't crash on empty struct created due to recursive reference.
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 15 Dec 2010 23:40:15 +0000 (23:40 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 15 Dec 2010 23:40:15 +0000 (23:40 +0000)
From-SVN: r167881

gcc/go/gofrontend/expressions.cc

index 7de4ec93c1de0068c06c95ca94bd7148c19d47d5..844ff660a2459916802171ecbd01ea12d4ffcef5 100644 (file)
@@ -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);