This patch cleans up the Go frontend to produce better error messages
when slicing types that can not be sliced.  Previously we were always
reporting an error about indexing, even though we were slicing.
Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu.  Committed
to mainline.

Ian
Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE     (revision 248081)
+++ gcc/go/gofrontend/MERGE     (working copy)
@@ -1,4 +1,4 @@
-d3997526dc0710e6b9b727a41184ce1770805794
+924a1fcc5658a5d66f5015921d7258e3a77519bc
 
 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 247981)
+++ gcc/go/gofrontend/expressions.cc    (working copy)
@@ -10610,10 +10610,24 @@ Index_expression::do_lower(Gogo*, Named_
        }
       return Expression::make_map_index(left, start, location);
     }
+  else if (cap != NULL)
+    {
+      go_error_at(location,
+                 "invalid 3-index slice of object that is not a slice");
+      return Expression::make_error(location);
+    }
+  else if (end != NULL)
+    {
+      go_error_at(location,
+                 ("attempt to slice object that is not "
+                  "array, slice, or string"));
+      return Expression::make_error(location);
+    }
   else
     {
       go_error_at(location,
-                  "attempt to index object which is not array, string, or 
map");
+                  ("attempt to index object that is not "
+                  "array, slice, string, or map"));
       return Expression::make_error(location);
     }
 }

Reply via email to