diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-02-24 03:53:10 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-02-24 03:53:10 +0000 |
commit | 6540ddba79e0f4286e5f8899691d9c29677222a0 (patch) | |
tree | 0a8cfa5bc5f24821f0707120b66f70a6a0418406 /gcc | |
parent | d6007535e639e34b9a73fd3967d1b7f135414386 (diff) | |
download | gcc-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.cc | 7 |
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); } |