diff mbox

Go patch committed: Better error messages for slicing invalid types

Message ID CAOyqgcXBawRnG5wvp3pLdC+1c9C9+pZJhLCEJWB=t-2DfNUi_A@mail.gmail.com
State New
Headers show

Commit Message

Ian Lance Taylor May 16, 2017, 12:05 a.m. UTC
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
diff mbox

Patch

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