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