<div dir="ltr">Oh, nice feature! I didn't look at the patch, but I tried to write this patch a while ago in <a href="http://llvm.org/bugs/show_bug.cgi?id=11739">http://llvm.org/bugs/show_bug.cgi?id=11739</a> (which this patch will fix) and there are a few comments on that bug that might be interesting (including review comments from zygoloid, test cases, etc). So if you haven't see that bug, maybe give it a look :-)</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Feb 23, 2014 at 9:04 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
================<br>
Comment at: lib/Parse/ParseDecl.cpp:4731<br>
@@ -4715,3 +4730,3 @@<br>
   if (getLangOpts().CPlusPlus && D.mayHaveIdentifier()) {<br>
     // ParseDeclaratorInternal might already have parsed the scope.<br>
     if (D.getCXXScopeSpec().isEmpty()) {<br>
----------------<br>
In this case, I think you probably shouldn't allow square brackets. That is, if someone writes:<br>
<br>
  int foo::[3]<br>
<br>
we shouldn't activate the special case.<br>
<br>
================<br>
Comment at: lib/Parse/ParseDecl.cpp:4721-4728<br>
@@ +4720,10 @@<br>
+  // save some information for a diagnostic later if the identifer is found.<br>
+  if (Tok.is(tok::l_square) && !D.mayOmitIdentifier()) {<br>
+    UnhandledError = true;<br>
+    StartLoc = Tok.getLocation();<br>
+    while (Tok.is(tok::l_square)) {<br>
+      ParseBracketDeclarator(D);<br>
+    }<br>
+    EndLoc = PP.getLocForEndOfToken(D.getLocEnd());<br>
+  }<br>
+<br>
----------------<br>
It looks like this will behave strangely if the remaining declarator is not just a simple identifier:<br>
<br>
  int[3] (*p);<br>
<br>
... will form an 'array of three pointers to int' type, rather than a 'pointer to array of three ints' type. Instead, to get this sort of thing right, I suggest you consume the array bound, then call ParseDeclarator, then add the array bound chunks to the declarator and issue your diagnostic.<br>

<br>
To get the diagnostic location right, you could store the location of the '[' as the identifier location in the Declarator object or similar.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D2712" target="_blank">http://llvm-reviews.chandlerc.com/D2712</a><br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br></div>