For this erroneous C++ test case:

extern void f(char**);
int main(int argc, char** argv) { f(argv[]); }

g++ reports

foo.cc: In function ‘int main(int, char**)’:
foo.cc:2: error: expected primary-expression before ‘]’ token

This is pretty good, but I question the use of the term "primary-expression". 
Primary-expression is slightly technical for this error, and, more improtantly,
what is missing is not a primary-expression; it is any expression at all.

Aside from avoiding the term "primary-expression", we can do better in this
specific case.  We actually know that we just saw '[' and that we are looking
for an array subscript.  We could say "missing subscript".  In other words,
let's take advantage of the fact that we have a recursive descent parser to put
more context into our error messages.

Finally, I'll note in passing that if I use -fshow-column I get the exact right
position, and in that case the phrase "before ']' token" is not very useful.


-- 
           Summary: C++: "expected primary-expression" error could be more
                    useful
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: ian at airs dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39858

Reply via email to