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"));

Reply via email to