compiler: Avoid unnecessary interface conversions.
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 14 Jun 2012 00:47:38 +0000 (00:47 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 14 Jun 2012 00:47:38 +0000 (00:47 +0000)
From-SVN: r188545

gcc/go/gofrontend/expressions.cc

index f9c80b3aeff8ed3ed4d32211ab784b789d6c887c..a2ac98703b44aaa687ff32392fa51aef35177bd8 100644 (file)
@@ -168,7 +168,8 @@ Expression::convert_for_assignment(Translate_context* context, Type* lhs_type,
   if (lhs_type_tree == error_mark_node)
     return error_mark_node;
 
-  if (lhs_type != rhs_type && lhs_type->interface_type() != NULL)
+  if (lhs_type->forwarded() != rhs_type->forwarded()
+      && lhs_type->interface_type() != NULL)
     {
       if (rhs_type->interface_type() == NULL)
        return Expression::convert_type_to_interface(context, lhs_type,
@@ -179,7 +180,8 @@ Expression::convert_for_assignment(Translate_context* context, Type* lhs_type,
                                                          rhs_type, rhs_tree,
                                                          false, location);
     }
-  else if (lhs_type != rhs_type && rhs_type->interface_type() != NULL)
+  else if (lhs_type->forwarded() != rhs_type->forwarded()
+          && rhs_type->interface_type() != NULL)
     return Expression::convert_interface_to_type(context, lhs_type, rhs_type,
                                                 rhs_tree, location);
   else if (lhs_type->is_slice_type() && rhs_type->is_nil_type())