diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2010-12-23 00:40:29 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2010-12-23 00:40:29 +0000 |
commit | 8211d03c0b0c23b883e4a2630d2e6e9478b12796 (patch) | |
tree | 01e987903d1b8ae9a585b8ccecdc4e1d5dd59cc1 | |
parent | bf0a2edc320dce72dff5a65ed43ae103e95a18bb (diff) | |
download | gcc-8211d03c0b0c23b883e4a2630d2e6e9478b12796.zip gcc-8211d03c0b0c23b883e4a2630d2e6e9478b12796.tar.gz gcc-8211d03c0b0c23b883e4a2630d2e6e9478b12796.tar.bz2 |
Don't crash asking for type of invalid const.
From-SVN: r168194
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 13 | ||||
-rw-r--r-- | gcc/go/gofrontend/expressions.h | 3 |
2 files changed, 14 insertions, 2 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 8592ef5..23f6e2b 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -894,6 +894,19 @@ Expression::make_type(Type* type, source_location location) return new Type_expression(type, location); } +// Class Parser_expression. + +Type* +Parser_expression::do_type() +{ + // We should never really ask for the type of a Parser_expression. + // However, it can happen, at least when we have an invalid const + // whose initializer refers to the const itself. In that case we + // may ask for the type when lowering the const itself. + gcc_assert(saw_errors()); + return Type::make_error_type(); +} + // Class Var_expression. // Lower a variable expression. Here we just make sure that the diff --git a/gcc/go/gofrontend/expressions.h b/gcc/go/gofrontend/expressions.h index 4780a8b..fe4ade2 100644 --- a/gcc/go/gofrontend/expressions.h +++ b/gcc/go/gofrontend/expressions.h @@ -873,8 +873,7 @@ class Parser_expression : public Expression do_lower(Gogo*, Named_object*, int) = 0; Type* - do_type() - { gcc_unreachable(); } + do_type(); void do_determine_type(const Type_context*) |