forked from OSchip/llvm-project
Fix -ferror-limit= to properly emit notes following the last error
messages. Fi from David Blaikie, tests from Nikola Smiljanic! llvm-svn: 137851
This commit is contained in:
parent
217f91fc57
commit
14208800fa
|
@ -733,11 +733,13 @@ bool DiagnosticIDs::ProcessDiag(Diagnostic &Diag) const {
|
|||
++Diag.NumErrors;
|
||||
}
|
||||
|
||||
// If we've emitted a lot of errors, emit a fatal error after it to stop a
|
||||
// flood of bogus errors.
|
||||
if (Diag.ErrorLimit && Diag.NumErrors >= Diag.ErrorLimit &&
|
||||
DiagLevel == DiagnosticIDs::Error)
|
||||
// If we've emitted a lot of errors, emit a fatal error instead of it to
|
||||
// stop a flood of bogus errors.
|
||||
if (Diag.ErrorLimit && Diag.NumErrors > Diag.ErrorLimit &&
|
||||
DiagLevel == DiagnosticIDs::Error) {
|
||||
Diag.SetDelayedDiagnostic(diag::fatal_too_many_errors);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// If we have any Fix-Its, make sure that all of the Fix-Its point into
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
// RUN: %clang_cc1 -ferror-limit 1 -fsyntax-only %s 2>&1 | FileCheck %s
|
||||
|
||||
// error and three notes emitted
|
||||
void foo(int);
|
||||
void foo(double);
|
||||
void foo(int, int);
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
}
|
||||
|
||||
// error and note suppressed by error-limit
|
||||
struct s1{};
|
||||
struct s1{};
|
||||
|
||||
// CHECK: 10:5: error: no matching function for call to 'foo'
|
||||
// CHECK: 6:6: note: candidate function not viable: requires 2 arguments, but 0 were provided
|
||||
// CHECK: 5:6: note: candidate function not viable: requires 1 argument, but 0 were provided
|
||||
// CHECK: 4:6: note: candidate function not viable: requires 1 argument, but 0 were provided
|
||||
// CHECK: fatal error: too many errors emitted, stopping now
|
||||
// CHECK-NOT: 15:8: error: redefinition of 's1'
|
||||
// CHECK-NOT: 14:8: note: previous definition is here
|
|
@ -0,0 +1,15 @@
|
|||
// RUN: %clang_cc1 -ferror-limit 1 -fsyntax-only %s 2>&1 | FileCheck %s
|
||||
|
||||
// error and note emitted
|
||||
struct s1{};
|
||||
struct s1{};
|
||||
|
||||
// error and note suppressed by error-limit
|
||||
struct s2{};
|
||||
struct s2{};
|
||||
|
||||
// CHECK: 5:8: error: redefinition of 's1'
|
||||
// CHECK: 4:8: note: previous definition is here
|
||||
// CHECK: fatal error: too many errors emitted, stopping now
|
||||
// CHECK-NOT: 9:8: error: redefinition of 's2'
|
||||
// CHECK-NOT: 8:8: note: previous definition is here
|
Loading…
Reference in New Issue