Don't store error types in the Type-to-GENERIC hash table.
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 15 Dec 2010 01:45:57 +0000 (01:45 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 15 Dec 2010 01:45:57 +0000 (01:45 +0000)
From-SVN: r167838

gcc/go/gofrontend/types.cc

index 842b4840db616567a9aaff0f23ef360a1e840a1d..e0b039fb2b637cf9c3ce53de681fd7189bb6c55c 100644 (file)
@@ -791,6 +791,9 @@ Type::get_tree(Gogo* gogo)
       || this->named_type() != NULL)
     return this->get_tree_without_hash(gogo);
 
+  if (this->is_error_type())
+    return error_mark_node;
+
   // To avoid confusing GIMPLE, we need to translate all identical Go
   // types to the same GIMPLE type.  We use a hash table to do that.
   // There is no need to use the hash table for named types, as named
@@ -807,6 +810,14 @@ Type::get_tree(Gogo* gogo)
 
   tree t = this->get_tree_without_hash(gogo);
 
+  // Don't store errors in the hash table.  This type might be a
+  // pointer to an error type or something like that.  Since error
+  // types are identical to everything else, that could cause us to
+  // return error_mark_node for pointers to any type, which will then
+  // confuse us later.
+  if (t == error_mark_node)
+    return error_mark_node;
+
   if (ins.first->second == NULL_TREE)
     ins.first->second = t;
   else