]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
compiler: Fix struct hash and equality with _ fields.
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 20 Sep 2012 04:35:13 +0000 (04:35 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 20 Sep 2012 04:35:13 +0000 (04:35 +0000)
From-SVN: r191511

gcc/go/gofrontend/expressions.cc
gcc/go/gofrontend/types.cc

index 892c561d6a32c9d149d993827751bb7de24dc066..ea24849657b49a40ce99e0d13db4799429c46c6e 100644 (file)
@@ -5178,6 +5178,9 @@ Binary_expression::lower_struct_comparison(Gogo* gogo,
        pf != fields->end();
        ++pf, ++field_index)
     {
+      if (Gogo::is_sink_name(pf->field_name()))
+       continue;
+
       if (field_index > 0)
        {
          if (left_temp == NULL)
index d527787ca5a29225fd428edbe43510fecbc9f5b2..5c210cb28d918912807922db857e6e331c3150fd 100644 (file)
@@ -579,6 +579,9 @@ Type::are_compatible_for_comparison(bool is_equality_op, const Type *t1,
               p != fields->end();
               ++p)
            {
+             if (Gogo::is_sink_name(p->field_name()))
+               continue;
+
              if (!p->type()->is_comparable())
                {
                  if (reason != NULL)
@@ -4294,6 +4297,9 @@ Struct_type::do_compare_is_identity(Gogo* gogo) const
        pf != fields->end();
        ++pf)
     {
+      if (Gogo::is_sink_name(pf->field_name()))
+       return false;
+
       if (!pf->type()->compare_is_identity(gogo))
        return false;
 
@@ -4767,6 +4773,9 @@ Struct_type::write_hash_function(Gogo* gogo, Named_type*,
        pf != fields->end();
        ++pf)
     {
+      if (Gogo::is_sink_name(pf->field_name()))
+       continue;
+
       if (first)
        first = false;
       else
@@ -4858,6 +4867,9 @@ Struct_type::write_equal_function(Gogo* gogo, Named_type* name)
        pf != fields->end();
        ++pf, ++field_index)
     {
+      if (Gogo::is_sink_name(pf->field_name()))
+       continue;
+
       // Compare one field in both P1 and P2.
       Expression* f1 = Expression::make_temporary_reference(p1, bloc);
       f1 = Expression::make_unary(OPERATOR_MULT, f1, bloc);