https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118853

            Bug ID: 118853
           Summary: -fmax-errors=N does not stop parsing after the Nth
                    error
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: zack+srcbugz at owlfolio dot org
  Target Milestone: ---

Created attachment 60479
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=60479&action=edit
Shell script that demonstrates the problem

The documentation makes it sound like -fmax-errors=N will cause GCC to 
exit immediately after printing the Nth error.  This is not what happens;
GCC seems instead to continue processing until it reaches either the end
of the file or the N+1'th error, and *then* it exits.  If there was an
N+1'th error, it is not printed.  In contrast, -Wfatal-errors causes
GCC to exit immediately after printing the first error.

This is observable if you have a very long (perhaps machine-generated)
source file with an error near the beginning.  The attached shell script
generates such a source file and times execution of your choice of compiler
with -fsyntax-only + (-Wfatal-errors, -fmax-errors=1, nothing).  Observe that
the execution time for the latter two is much longer than the execution time
for -Wfatal-errors.

I can see how "-fmax-errors=2" could be understood to mean "halt processing
if _more than_ two errors are encountered", but that's not what the manual
says it does, and also in that case it should print the third error before
giving up, and also in that case -fmax-errors=0 should do what -Wfatal-errors
does.  I think user expectations are more likely to be that -fmax-errors=N
stops processing immediately after printing the Nth error, as is currently
the case for -Wfatal-errors with one error.

Reply via email to