aboutsummaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2011-03-03 04:25:47 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2011-03-03 04:25:47 +0000
commitba6413bd1854385bfc397d59d69eedf419ef2313 (patch)
tree1d12c3d6208e1dab281f7c0f213270e7765673f2 /gcc/go
parent4d04d67a55d2ca36fd09e04d9ce9ea4c9ed689b8 (diff)
downloadgcc-ba6413bd1854385bfc397d59d69eedf419ef2313.zip
gcc-ba6413bd1854385bfc397d59d69eedf419ef2313.tar.gz
gcc-ba6413bd1854385bfc397d59d69eedf419ef2313.tar.bz2
Don't crash getting type descriptor of abstract types.
From-SVN: r170642
Diffstat (limited to 'gcc/go')
-rw-r--r--gcc/go/gofrontend/types.cc13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc
index cebf33a..04b0bec 100644
--- a/gcc/go/gofrontend/types.cc
+++ b/gcc/go/gofrontend/types.cc
@@ -1764,7 +1764,12 @@ Integer_type::do_hash_for_method(Gogo*) const
tree
Integer_type::do_get_tree(Gogo*)
{
- gcc_assert(!this->is_abstract_);
+ if (this->is_abstract_)
+ {
+ gcc_assert(saw_errors());
+ return error_mark_node;
+ }
+
if (this->is_unsigned_)
{
if (this->bits_ == INT_TYPE_SIZE)
@@ -1818,7 +1823,7 @@ Integer_type::do_type_descriptor(Gogo* gogo, Named_type* name)
void
Integer_type::do_reflection(Gogo*, std::string*) const
{
- gcc_unreachable();
+ gcc_assert(saw_errors());
}
// Mangled name.
@@ -1974,7 +1979,7 @@ Float_type::do_type_descriptor(Gogo* gogo, Named_type* name)
void
Float_type::do_reflection(Gogo*, std::string*) const
{
- gcc_unreachable();
+ gcc_assert(saw_errors());
}
// Mangled name.
@@ -2134,7 +2139,7 @@ Complex_type::do_type_descriptor(Gogo* gogo, Named_type* name)
void
Complex_type::do_reflection(Gogo*, std::string*) const
{
- gcc_unreachable();
+ gcc_assert(saw_errors());
}
// Mangled name.