OSDN Git Service

compiler: Don't crash on type switch case nil with selector.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Feb 2012 00:02:58 +0000 (00:02 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Feb 2012 00:02:58 +0000 (00:02 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183782 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/gogo.cc
gcc/go/gofrontend/gogo.h

index e94090b..c65e47f 100644 (file)
@@ -3848,6 +3848,24 @@ Variable::add_preinit_statement(Gogo* gogo, Statement* s)
   b->set_end_location(s->location());
 }
 
+// Whether this variable has a type.
+
+bool
+Variable::has_type() const
+{
+  if (this->type_ == NULL)
+    return false;
+
+  // A variable created in a type switch case nil does not actually
+  // have a type yet.  It will be changed to use the initializer's
+  // type in determine_type.
+  if (this->is_type_switch_var_
+      && this->type_->is_nil_constant_as_type())
+    return false;
+
+  return true;
+}
+
 // In an assignment which sets a variable to a tuple of EXPR, return
 // the type of the first element of the tuple.
 
index 7d77c9f..2231e5d 100644 (file)
@@ -1154,8 +1154,7 @@ class Variable
 
   // Return whether the type is defined yet.
   bool
-  has_type() const
-  { return this->type_ != NULL; }
+  has_type() const;
 
   // Get the initial value.
   Expression*