Don't crash on type switch of nil.
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 24 Feb 2011 03:53:10 +0000 (03:53 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 24 Feb 2011 03:53:10 +0000 (03:53 +0000)
From-SVN: r170455

gcc/go/gofrontend/statements.cc

index 45e45a381b7e3ffeb8c4e5f1262eb8ce87aff54f..629fdd8161519f54cec55ae29f929ff20403a088 100644 (file)
@@ -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);
     }