This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Go patch committed: Reject invalid composite literals


This patch to the Go frontend adds a check to reject composite literals
that the language syntax forbids.  The parser was able to parse some
cases unambiguously because it already knew that some name was a type,
but since that can not always be known that parse is not permitted.
Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu.
Committed to mainline and 4.7 branch.

Ian

diff -r 91db663343df go/parse.cc
--- a/go/parse.cc	Mon Apr 23 22:54:27 2012 -0700
+++ b/go/parse.cc	Tue Apr 24 07:50:51 2012 -0700
@@ -2865,7 +2865,16 @@
     {
       if (this->peek_token()->is_op(OPERATOR_LCURLY))
 	{
-	  if (is_parenthesized)
+	  if (!may_be_composite_lit)
+	    {
+	      Type* t = ret->type();
+	      if (t->named_type() != NULL
+		  || t->forward_declaration_type() != NULL)
+		error_at(start_loc,
+			 _("parentheses required around this composite literal"
+			   "to avoid parsing ambiguity"));
+	    }
+	  else if (is_parenthesized)
 	    error_at(start_loc,
 		     "cannot parenthesize type in composite literal");
 	  ret = this->composite_lit(ret->type(), 0, ret->location());

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]