aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2011-02-24 03:53:10 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2011-02-24 03:53:10 +0000
commit6540ddba79e0f4286e5f8899691d9c29677222a0 (patch)
tree0a8cfa5bc5f24821f0707120b66f70a6a0418406 /gcc
parentd6007535e639e34b9a73fd3967d1b7f135414386 (diff)
downloadgcc-6540ddba79e0f4286e5f8899691d9c29677222a0.zip
gcc-6540ddba79e0f4286e5f8899691d9c29677222a0.tar.gz
gcc-6540ddba79e0f4286e5f8899691d9c29677222a0.tar.bz2
Don't crash on type switch of nil.
From-SVN: r170455
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/statements.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc
index 45e45a3..629fdd8 100644
--- a/gcc/go/gofrontend/statements.cc
+++ b/gcc/go/gofrontend/statements.cc
@@ -3905,10 +3905,13 @@ Type_switch_statement::do_lower(Gogo*, Block* enclosing)
{
// Doing a type switch on a non-interface type. Should we issue
// a warning for this case?
- // descriptor_temp = DESCRIPTOR
Expression* lhs = Expression::make_temporary_reference(descriptor_temp,
loc);
- Expression* rhs = Expression::make_type_descriptor(val_type, loc);
+ Expression* rhs;
+ if (val_type->is_nil_type())
+ rhs = Expression::make_nil(loc);
+ else
+ rhs = Expression::make_type_descriptor(val_type, loc);
Statement* s = Statement::make_assignment(lhs, rhs, loc);
b->add_statement(s);
}