[cfe-dev] -ferror-limit=1 by default?

David Chisnall via cfe-dev cfe-dev at lists.llvm.org
Fri Nov 8 00:12:15 PST 2019


On 07/11/2019 18:23, Eric Christopher via cfe-dev wrote:
> Hi All!
> 
> Replying to John here on twitter:
> 
> https://twitter.com/echristo/status/1192506726920011776
> 
> where he was noticing the helpfulness of -ferror-limit=1 as making a
> huge usability difference. I acknowledge that being able to do good
> error recovery and keep going is useful in some cases, but for day to
> day interactive this might be a better usability default? Especially
> with the compiler fast enough for the edit/compile cycle?
> 
> Thoughts? Shall we do this?

Anecdotally, I've set -ferror-limit=3 over the last six months  for a 
few projects that I work on.  A few observations:

  - The compile time for non-trivial C++ compilation units is 
sufficiently long that an extra compile cycle before getting to the 
second error is a noticeable delay.

  - With a limit of 3 (picked in a completely non-scientific way), I 
have a roughly 50:50 chance of being able to fix all three errors at the 
same time and a higher chance of being able to fix 2.

  - Occasionally, I will have 20 instances of the same root-cause.  If 
an API changes in a header, it's useful to find all callees.  I think we 
could do something useful with heuristics to catch things like this (for 
example, if the same invalid identifier appears in multiple places in 
what appears to be the same kind of scope, report them together).  With 
-ferror-limit=3 currently, I have multiple compile cycles to find them 
all (typically, I just do one build with no error limit in these cases 
today).

  - If I miss a closing brace, 0 of the errors that clang reports are 
useful, at any error limit.  A single check that counts the number of 
open and close braces and, if they are different numbers with a fast 
response would be very helpful.  At the moment, it can be 10-20 seconds 
for a heavily templated file before I see an error that is caused by 
something that the lexer could have seen (all of the errors are then 
nonsense, because they're caused by trying to parse a method definition 
inside another method or similar).

TL;DR: An error limit of 3 gives me too many errors some times and not 
enough at other times, I think a limit of 1 would give not enough a lot 
more often.

David



More information about the cfe-dev mailing list