diff options
author | Chris Lattner <sabre@nondot.org> | 2010-04-07 18:47:42 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-04-07 18:47:42 +0000 |
commit | 53eee7ba970d21ff15bbd4334164037a3b4cc4b8 (patch) | |
tree | 0cf5e2b1b124846530d4d23f3fd9e3acf9f38b15 | |
parent | 5863b41004144470b935d18e6d52ebf11aca8597 (diff) |
Instead of counting totally diagnostics, split the count into a count
of errors and warnings. This allows us to emit something like this:
2 warnings and 1 error generated.
instead of:
3 diagnostics generated.
This also stops counting 'notes' because they are just follow-on information
about the previous diag, not a diagnostic in themselves.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100675 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/Diagnostic.h | 6 | ||||
-rw-r--r-- | lib/Basic/Diagnostic.cpp | 7 | ||||
-rw-r--r-- | lib/Frontend/CompilerInstance.cpp | 18 | ||||
-rw-r--r-- | test/ASTMerge/category.m | 2 | ||||
-rw-r--r-- | test/ASTMerge/enum.c | 2 | ||||
-rw-r--r-- | test/ASTMerge/function.c | 2 | ||||
-rw-r--r-- | test/ASTMerge/interface.m | 2 | ||||
-rw-r--r-- | test/ASTMerge/property.m | 2 | ||||
-rw-r--r-- | test/ASTMerge/struct.c | 2 | ||||
-rw-r--r-- | test/ASTMerge/typedef.c | 2 | ||||
-rw-r--r-- | test/ASTMerge/var.c | 2 | ||||
-rw-r--r-- | test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret.m | 4 | ||||
-rw-r--r-- | test/Rewriter/dllimport-typedef.c | 4 | ||||
-rw-r--r-- | test/Rewriter/missing-dllimport.c | 4 |
14 files changed, 35 insertions, 24 deletions
diff --git a/include/clang/Basic/Diagnostic.h b/include/clang/Basic/Diagnostic.h index 57dd6967fc..9279871997 100644 --- a/include/clang/Basic/Diagnostic.h +++ b/include/clang/Basic/Diagnostic.h @@ -211,8 +211,8 @@ private: /// diagnostic that they follow. Diagnostic::Level LastDiagLevel; - unsigned NumDiagnostics; // Number of diagnostics reported - unsigned NumErrors; // Number of diagnostics that are errors + unsigned NumWarnings; // Number of warnings reported + unsigned NumErrors; // Number of errors reported /// CustomDiagInfo - Information for uniquing and looking up custom diags. diag::CustomDiagInfo *CustomDiagInfo; @@ -338,7 +338,7 @@ public: bool hasFatalErrorOccurred() const { return FatalErrorOccurred; } unsigned getNumErrors() const { return NumErrors; } - unsigned getNumDiagnostics() const { return NumDiagnostics; } + unsigned getNumWarnings() const { return NumWarnings; } /// getCustomDiagID - Return an ID for a diagnostic with the specified message /// and level. If this is the first request for this diagnosic, it is diff --git a/lib/Basic/Diagnostic.cpp b/lib/Basic/Diagnostic.cpp index 2b7fcd07f9..a1094ad95c 100644 --- a/lib/Basic/Diagnostic.cpp +++ b/lib/Basic/Diagnostic.cpp @@ -223,8 +223,8 @@ Diagnostic::Diagnostic(DiagnosticClient *client) : Client(client) { ErrorOccurred = false; FatalErrorOccurred = false; - NumDiagnostics = 0; + NumWarnings = 0; NumErrors = 0; CustomDiagInfo = 0; CurDiagID = ~0U; @@ -555,7 +555,10 @@ bool Diagnostic::ProcessDiag() { // Finally, report it. Client->HandleDiagnostic(DiagLevel, Info); - if (Client->IncludeInDiagnosticCounts()) ++NumDiagnostics; + if (Client->IncludeInDiagnosticCounts()) { + if (DiagLevel == Diagnostic::Warning) + ++NumWarnings; + } CurDiagID = ~0U; diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp index 1f915e3713..685e6c281c 100644 --- a/lib/Frontend/CompilerInstance.cpp +++ b/lib/Frontend/CompilerInstance.cpp @@ -513,11 +513,19 @@ bool CompilerInstance::ExecuteAction(FrontendAction &Act) { } } - if (getDiagnosticOpts().ShowCarets) - if (unsigned NumDiagnostics = getDiagnostics().getNumDiagnostics()) - OS << NumDiagnostics << " diagnostic" - << (NumDiagnostics == 1 ? "" : "s") - << " generated.\n"; + if (getDiagnosticOpts().ShowCarets) { + unsigned NumWarnings = getDiagnostics().getNumWarnings(); + unsigned NumErrors = getDiagnostics().getNumErrors(); + + if (NumWarnings) + OS << NumWarnings << " warning" << (NumWarnings == 1 ? "" : "s"); + if (NumWarnings && NumErrors) + OS << " and "; + if (NumErrors) + OS << NumErrors << " error" << (NumErrors == 1 ? "" : "s"); + if (NumWarnings || NumErrors) + OS << " generated.\n"; + } if (getFrontendOpts().ShowStats) { getFileManager().PrintStats(); diff --git a/test/ASTMerge/category.m b/test/ASTMerge/category.m index bf0d11b612..6ba2292041 100644 --- a/test/ASTMerge/category.m +++ b/test/ASTMerge/category.m @@ -6,4 +6,4 @@ // CHECK: category1.m:16:1: note: instance method 'method2' also declared here // CHECK: category2.m:26:1: error: instance method 'method3' has incompatible result types in different translation units ('float' vs. 'int') // CHECK: category1.m:24:1: note: instance method 'method3' also declared here -// CHECK: 4 diagnostics generated. +// CHECK: 2 errors generated. diff --git a/test/ASTMerge/enum.c b/test/ASTMerge/enum.c index 9b78fd1022..4380d192f1 100644 --- a/test/ASTMerge/enum.c +++ b/test/ASTMerge/enum.c @@ -22,4 +22,4 @@ // CHECK: enum1.c:30:6: note: no corresponding enumerator here // CHECK: enum2.c:34:3: error: external variable 'x5' declared with incompatible types in different translation units ('enum E5' vs. 'enum E5') // CHECK: enum1.c:34:3: note: declared here with type 'enum E5' -// CHECK: 20 diagnostics generated +// CHECK: 4 warnings and 4 errors generated diff --git a/test/ASTMerge/function.c b/test/ASTMerge/function.c index 581b6ec588..f97eceed98 100644 --- a/test/ASTMerge/function.c +++ b/test/ASTMerge/function.c @@ -6,4 +6,4 @@ // CHECK: function1.c:2:6: note: declared here with type 'void (int, float)' // CHECK: function2.c:5:6: error: external function 'f3' declared with incompatible types in different translation units ('void (int)' vs. 'void (void)') // CHECK: function1.c:4:6: note: declared here with type 'void (void)' -// CHECK: 4 diagnostics generated +// CHECK: 2 errors generated diff --git a/test/ASTMerge/interface.m b/test/ASTMerge/interface.m index 47e4e05269..420ae38825 100644 --- a/test/ASTMerge/interface.m +++ b/test/ASTMerge/interface.m @@ -15,5 +15,5 @@ // CHECK: interface1.m:46:1: note: class method 'bar:' also declared here // CHECK: interface2.m:57:20: error: instance method 'bar:' has a parameter with a different types in different translation units ('double' vs. 'float') // CHECK: interface1.m:58:19: note: declared here with type 'float' -// CHECK: 13 diagnostics generated +// CHECK: 6 errors generated diff --git a/test/ASTMerge/property.m b/test/ASTMerge/property.m index 0fd7e4872d..5f7a7308da 100644 --- a/test/ASTMerge/property.m +++ b/test/ASTMerge/property.m @@ -6,4 +6,4 @@ // CHECK: property1.m:10:28: note: declared here with type 'float' // CHECK: property2.m:12:26: error: instance method 'Prop1' has incompatible result types in different translation units ('int' vs. 'float') // CHECK: property1.m:10:28: note: instance method 'Prop1' also declared here -// CHECK: 4 diagnostics generated. +// CHECK: 2 errors generated. diff --git a/test/ASTMerge/struct.c b/test/ASTMerge/struct.c index e72b93b249..7217222ae5 100644 --- a/test/ASTMerge/struct.c +++ b/test/ASTMerge/struct.c @@ -39,4 +39,4 @@ // CHECK: struct2.c:53:43: note: field 'Deeper' has type 'struct DeeperError *' here // CHECK: struct2.c:54:3: error: external variable 'xDeep' declared with incompatible types in different translation units ('struct DeepError' vs. 'struct DeepError') // CHECK: struct1.c:57:3: note: declared here with type 'struct DeepError' -// CHECK: 37 diagnostics +// CHECK: 8 warnings and 7 errors generated diff --git a/test/ASTMerge/typedef.c b/test/ASTMerge/typedef.c index 4498864b49..6f911295b9 100644 --- a/test/ASTMerge/typedef.c +++ b/test/ASTMerge/typedef.c @@ -4,4 +4,4 @@ // CHECK: typedef2.c:4:10: error: external variable 'x2' declared with incompatible types in different translation units ('Typedef2' (aka 'double') vs. 'Typedef2' (aka 'int')) // CHECK: typedef1.c:4:10: note: declared here with type 'Typedef2' (aka 'int') -// CHECK: 2 diagnostics +// CHECK: 1 error diff --git a/test/ASTMerge/var.c b/test/ASTMerge/var.c index fd307940af..7f23b9f5d2 100644 --- a/test/ASTMerge/var.c +++ b/test/ASTMerge/var.c @@ -9,4 +9,4 @@ // CHECK: var1.h:1:8: note: declared here with type 'double' // CHECK: error: external variable 'xarray3' declared with incompatible types in different translation units ('int [17]' vs. 'int [18]') // CHECK: var1.c:7:5: note: declared here with type 'int [18]' -// CHECK: 6 diagnostics +// CHECK: 3 errors diff --git a/test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret.m b/test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret.m index 5722a04aa2..2e9c528612 100644 --- a/test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret.m +++ b/test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret.m @@ -77,6 +77,6 @@ int marker(void) { // control reaches end of non-void function // CHECK-darwin8: warning: The receiver of message 'doubleM' is nil and returns a value of type 'double' that will be garbage // CHECK-darwin8: warning: The receiver of message 'longlongM' is nil and returns a value of type 'long long' that will be garbage // CHECK-darwin8: control reaches end of non-void function -// CHECK-darwin8: 5 diagnostics generated +// CHECK-darwin8: 5 warnings generated // CHECK-darwin9: control reaches end of non-void function -// CHECK-darwin9: 1 diagnostic generated +// CHECK-darwin9: 1 warning generated diff --git a/test/Rewriter/dllimport-typedef.c b/test/Rewriter/dllimport-typedef.c index 28d2e297fa..b86fa4a1c7 100644 --- a/test/Rewriter/dllimport-typedef.c +++ b/test/Rewriter/dllimport-typedef.c @@ -10,8 +10,8 @@ typedef __declspec(dllimport) int CB(void); void bar() { return 1; } // CHECK-NEG: warning: void function 'bar' should not return a value -// CHECK-NEG: 1 diagnostic generated +// CHECK-NEG: 1 warning generated // CHECK-POS: warning: 'dllimport' attribute only applies to variable and function type // CHECK-POS: warning: void function 'bar' should not return a value -// CHECK-POS: 2 diagnostics generated +// CHECK-POS: 2 warnings generated diff --git a/test/Rewriter/missing-dllimport.c b/test/Rewriter/missing-dllimport.c index d2356bd956..c060379db0 100644 --- a/test/Rewriter/missing-dllimport.c +++ b/test/Rewriter/missing-dllimport.c @@ -12,8 +12,8 @@ inline int __cdecl foo() { return 0; } void bar() { return 1; } // CHECK-NEG: warning: void function 'bar' should not return a value -// CHECK-NEG: 1 diagnostic generated +// CHECK-NEG: 1 warning generated // CHECK-POS: warning: 'foo' redeclared without dllimport attribute: previous dllimport ignored // CHECK-POS: warning: void function 'bar' should not return a value -// CHECK-POS: 2 diagnostics generated +// CHECK-POS: 2 warnings generated |