From a5958869f6bcd57e8691e6c4fb4086a96c17e419 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Thu, 25 Oct 2012 22:07:10 +0000 Subject: TrackConstraintBRVisitor and ConditionBRVisitor can emit similar path notes for cases where a value may be assumed to be null, etc. Instead of having redundant diagnostics, do a pass over the generated PathDiagnostic pieces and remove notes from TrackConstraintBRVisitor that are already covered by ConditionBRVisitor, whose notes tend to be better. Fixes llvm-svn: 166728 --- clang/test/Analysis/method-call-path-notes.cpp | 86 +++++--------------------- 1 file changed, 14 insertions(+), 72 deletions(-) (limited to 'clang/test/Analysis/method-call-path-notes.cpp') diff --git a/clang/test/Analysis/method-call-path-notes.cpp b/clang/test/Analysis/method-call-path-notes.cpp index 75996306569..a41a7864aa0 100644 --- a/clang/test/Analysis/method-call-path-notes.cpp +++ b/clang/test/Analysis/method-call-path-notes.cpp @@ -26,7 +26,7 @@ void test_ic_set_to_null() { } void test_ic_null(TestInstanceCall *p) { - if (!p) // expected-note {{Assuming pointer value is null}} expected-note {{Assuming 'p' is null}} expected-note {{Taking true branch}} + if (!p) // expected-note {{Assuming 'p' is null}} expected-note {{Taking true branch}} p->foo(); // expected-warning {{Called C++ object pointer is null}} expected-note{{Called C++ object pointer is null}} } @@ -38,7 +38,7 @@ void test_ic_member_ptr() { } void test_cast(const TestInstanceCall *p) { - if (!p) // expected-note {{Assuming pointer value is null}} expected-note {{Assuming 'p' is null}} expected-note {{Taking true branch}} + if (!p) // expected-note {{Assuming 'p' is null}} expected-note {{Taking true branch}} const_cast(p)->foo(); // expected-warning {{Called C++ object pointer is null}} expected-note {{Called C++ object pointer is null}} } @@ -74,7 +74,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'p' declared without an initial value // CHECK-NEXT: message -// CHECK-NEXT: Variable 'p' declared without an initial value +// CHECK-NEXT: Variable 'p' declared without an initial value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -137,7 +137,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Called C++ object pointer is uninitialized // CHECK-NEXT: message -// CHECK-NEXT: Called C++ object pointer is uninitialized +// CHECK-NEXT: Called C++ object pointer is uninitialized // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionCalled C++ object pointer is uninitialized @@ -183,7 +183,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: message -// CHECK-NEXT: Variable 'p' initialized to a null pointer value +// CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -246,7 +246,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Called C++ object pointer is null // CHECK-NEXT: message -// CHECK-NEXT: Called C++ object pointer is null +// CHECK-NEXT: Called C++ object pointer is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionCalled C++ object pointer is null @@ -326,7 +326,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Null pointer value stored to 'p' // CHECK-NEXT: message -// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: Null pointer value stored to 'p' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -389,7 +389,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Called C++ object pointer is null // CHECK-NEXT: message -// CHECK-NEXT: Called C++ object pointer is null +// CHECK-NEXT: Called C++ object pointer is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionCalled C++ object pointer is null @@ -469,36 +469,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line29 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line29 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line29 -// CHECK-NEXT: col8 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Assuming pointer value is null -// CHECK-NEXT: message -// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -561,7 +532,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Called C++ object pointer is null // CHECK-NEXT: message -// CHECK-NEXT: Called C++ object pointer is null +// CHECK-NEXT: Called C++ object pointer is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionCalled C++ object pointer is null @@ -607,7 +578,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: message -// CHECK-NEXT: Variable 'p' initialized to a null pointer value +// CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -670,7 +641,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Called C++ object pointer is null // CHECK-NEXT: message -// CHECK-NEXT: Called C++ object pointer is null +// CHECK-NEXT: Called C++ object pointer is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionCalled C++ object pointer is null @@ -750,36 +721,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col8 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Assuming pointer value is null -// CHECK-NEXT: message -// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -842,7 +784,7 @@ void test_cast(const TestInstanceCall *p) { // CHECK-NEXT: extended_message // CHECK-NEXT: Called C++ object pointer is null // CHECK-NEXT: message -// CHECK-NEXT: Called C++ object pointer is null +// CHECK-NEXT: Called C++ object pointer is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionCalled C++ object pointer is null -- cgit v1.2.3