Commit 6c74ce92 by Ian Lance Taylor

compiler: Fix struct hash and equality with _ fields.

From-SVN: r191511
parent 9d12bc68
...@@ -5178,6 +5178,9 @@ Binary_expression::lower_struct_comparison(Gogo* gogo, ...@@ -5178,6 +5178,9 @@ Binary_expression::lower_struct_comparison(Gogo* gogo,
pf != fields->end(); pf != fields->end();
++pf, ++field_index) ++pf, ++field_index)
{ {
if (Gogo::is_sink_name(pf->field_name()))
continue;
if (field_index > 0) if (field_index > 0)
{ {
if (left_temp == NULL) if (left_temp == NULL)
......
...@@ -579,6 +579,9 @@ Type::are_compatible_for_comparison(bool is_equality_op, const Type *t1, ...@@ -579,6 +579,9 @@ Type::are_compatible_for_comparison(bool is_equality_op, const Type *t1,
p != fields->end(); p != fields->end();
++p) ++p)
{ {
if (Gogo::is_sink_name(p->field_name()))
continue;
if (!p->type()->is_comparable()) if (!p->type()->is_comparable())
{ {
if (reason != NULL) if (reason != NULL)
...@@ -4294,6 +4297,9 @@ Struct_type::do_compare_is_identity(Gogo* gogo) const ...@@ -4294,6 +4297,9 @@ Struct_type::do_compare_is_identity(Gogo* gogo) const
pf != fields->end(); pf != fields->end();
++pf) ++pf)
{ {
if (Gogo::is_sink_name(pf->field_name()))
return false;
if (!pf->type()->compare_is_identity(gogo)) if (!pf->type()->compare_is_identity(gogo))
return false; return false;
...@@ -4767,6 +4773,9 @@ Struct_type::write_hash_function(Gogo* gogo, Named_type*, ...@@ -4767,6 +4773,9 @@ Struct_type::write_hash_function(Gogo* gogo, Named_type*,
pf != fields->end(); pf != fields->end();
++pf) ++pf)
{ {
if (Gogo::is_sink_name(pf->field_name()))
continue;
if (first) if (first)
first = false; first = false;
else else
...@@ -4858,6 +4867,9 @@ Struct_type::write_equal_function(Gogo* gogo, Named_type* name) ...@@ -4858,6 +4867,9 @@ Struct_type::write_equal_function(Gogo* gogo, Named_type* name)
pf != fields->end(); pf != fields->end();
++pf, ++field_index) ++pf, ++field_index)
{ {
if (Gogo::is_sink_name(pf->field_name()))
continue;
// Compare one field in both P1 and P2. // Compare one field in both P1 and P2.
Expression* f1 = Expression::make_temporary_reference(p1, bloc); Expression* f1 = Expression::make_temporary_reference(p1, bloc);
f1 = Expression::make_unary(OPERATOR_MULT, f1, bloc); f1 = Expression::make_unary(OPERATOR_MULT, f1, bloc);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment