This patch by Chris Manghane fixes the Go frontend to correctly diagnose an attempt to shift by a string value. This fixes https://golang.org/issue/12618 . Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline.
Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 228578) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -a4bcd319d98ddc52b3e7d16ec87d92aad868ab05 +302d8abbc499e28088d758ae8b2c024d8e50b9b3 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. Index: gcc/go/gofrontend/expressions.cc =================================================================== --- gcc/go/gofrontend/expressions.cc (revision 228578) +++ gcc/go/gofrontend/expressions.cc (working copy) @@ -5601,7 +5601,9 @@ Binary_expression::do_check_types(Gogo*) if (left_type->integer_type() == NULL) this->report_error(_("shift of non-integer operand")); - if (!right_type->is_abstract() + if (right_type->is_string_type()) + this->report_error(_("shift count not unsigned integer")); + else if (!right_type->is_abstract() && (right_type->integer_type() == NULL || !right_type->integer_type()->is_unsigned())) this->report_error(_("shift count not unsigned integer"));