From: Ian Lance Taylor Date: Wed, 15 Dec 2010 01:45:57 +0000 (+0000) Subject: Don't store error types in the Type-to-GENERIC hash table. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2e3d957596e6c54bbeb1d080fcb4ca01e2a29b78;p=gcc.git Don't store error types in the Type-to-GENERIC hash table. From-SVN: r167838 --- diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index 842b4840db6..e0b039fb2b6 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -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