aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2010-12-23 00:40:29 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2010-12-23 00:40:29 +0000
commit8211d03c0b0c23b883e4a2630d2e6e9478b12796 (patch)
tree01e987903d1b8ae9a585b8ccecdc4e1d5dd59cc1 /gcc
parentbf0a2edc320dce72dff5a65ed43ae103e95a18bb (diff)
downloadgcc-8211d03c0b0c23b883e4a2630d2e6e9478b12796.zip
gcc-8211d03c0b0c23b883e4a2630d2e6e9478b12796.tar.gz
gcc-8211d03c0b0c23b883e4a2630d2e6e9478b12796.tar.bz2
Don't crash asking for type of invalid const.
From-SVN: r168194
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/expressions.cc13
-rw-r--r--gcc/go/gofrontend/expressions.h3
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*)