diff mbox

Go patch committed: Reject invalid composite literals

Message ID mcrd36xw579.fsf@dhcp-172-18-216-180.mtv.corp.google.com
State New
Headers show

Commit Message

Ian Lance Taylor April 24, 2012, 2:54 p.m. UTC
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 mbox

Patch

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