This revision was automatically updated to reflect the committed changes. Closed by commit rL369604: [analyzer] TrackConstraintBRVisitor: Do not track unknown values (authored by Charusso, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits.
Changed prior to commit: https://reviews.llvm.org/D66267?vs=215525&id=216528#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66267/new/ https://reviews.llvm.org/D66267 Files: cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp cfe/trunk/test/Analysis/cast-value.cpp Index: cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp =================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp +++ cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp @@ -1992,9 +1992,10 @@ report.markInteresting(V, TKind); report.addVisitor(std::make_unique<UndefOrNullArgVisitor>(R)); - // If the contents are symbolic, find out when they became null. - if (V.getAsLocSymbol(/*IncludeBaseRegions*/ true)) - report.addVisitor(std::make_unique<TrackConstraintBRVisitor>( + // If the contents are symbolic and null, find out when they became null. + if (V.getAsLocSymbol(/*IncludeBaseRegions=*/true)) + if (LVState->isNull(V).isConstrainedTrue()) + report.addVisitor(std::make_unique<TrackConstraintBRVisitor>( V.castAs<DefinedSVal>(), false)); // Add visitor, which will suppress inline defensive checks. Index: cfe/trunk/test/Analysis/cast-value.cpp =================================================================== --- cfe/trunk/test/Analysis/cast-value.cpp +++ cfe/trunk/test/Analysis/cast-value.cpp @@ -152,8 +152,7 @@ void evalNonNullParamNonNullReturnReference(const Shape &S) { const auto *C = dyn_cast_or_null<Circle>(S); // expected-note@-1 {{Assuming dynamic cast from 'Shape' to 'Circle' succeeds}} - // expected-note@-2 {{Assuming pointer value is null}} - // expected-note@-3 {{'C' initialized here}} + // expected-note@-2 {{'C' initialized here}} (void)(1 / !(bool)C); // expected-note@-1 {{'C' is non-null}} @@ -165,8 +164,7 @@ void evalNonNullParamNonNullReturn(const Shape *S) { const auto *C = cast<Circle>(S); // expected-note@-1 {{Checked cast from 'Shape' to 'Circle' succeeds}} - // expected-note@-2 {{Assuming pointer value is null}} - // expected-note@-3 {{'C' initialized here}} + // expected-note@-2 {{'C' initialized here}} (void)(1 / !(bool)C); // expected-note@-1 {{'C' is non-null}} @@ -178,7 +176,6 @@ void evalNonNullParamNullReturn(const Shape *S) { const auto *C = dyn_cast_or_null<Circle>(S); // expected-note@-1 {{Assuming dynamic cast from 'Shape' to 'Circle' fails}} - // expected-note@-2 {{Assuming pointer value is null}} if (const auto *T = dyn_cast_or_null<Triangle>(S)) { // expected-note@-1 {{Assuming dynamic cast from 'Shape' to 'Triangle' succeeds}} @@ -207,9 +204,8 @@ void evalZeroParamNonNullReturnPointer(const Shape *S) { const auto *C = S->castAs<Circle>(); - // expected-note@-1 {{Assuming pointer value is null}} - // expected-note@-2 {{Checked cast to 'Circle' succeeds}} - // expected-note@-3 {{'C' initialized here}} + // expected-note@-1 {{Checked cast to 'Circle' succeeds}} + // expected-note@-2 {{'C' initialized here}} (void)(1 / !(bool)C); // expected-note@-1 {{'C' is non-null}}
Index: cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp =================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp +++ cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp @@ -1992,9 +1992,10 @@ report.markInteresting(V, TKind); report.addVisitor(std::make_unique<UndefOrNullArgVisitor>(R)); - // If the contents are symbolic, find out when they became null. - if (V.getAsLocSymbol(/*IncludeBaseRegions*/ true)) - report.addVisitor(std::make_unique<TrackConstraintBRVisitor>( + // If the contents are symbolic and null, find out when they became null. + if (V.getAsLocSymbol(/*IncludeBaseRegions=*/true)) + if (LVState->isNull(V).isConstrainedTrue()) + report.addVisitor(std::make_unique<TrackConstraintBRVisitor>( V.castAs<DefinedSVal>(), false)); // Add visitor, which will suppress inline defensive checks. Index: cfe/trunk/test/Analysis/cast-value.cpp =================================================================== --- cfe/trunk/test/Analysis/cast-value.cpp +++ cfe/trunk/test/Analysis/cast-value.cpp @@ -152,8 +152,7 @@ void evalNonNullParamNonNullReturnReference(const Shape &S) { const auto *C = dyn_cast_or_null<Circle>(S); // expected-note@-1 {{Assuming dynamic cast from 'Shape' to 'Circle' succeeds}} - // expected-note@-2 {{Assuming pointer value is null}} - // expected-note@-3 {{'C' initialized here}} + // expected-note@-2 {{'C' initialized here}} (void)(1 / !(bool)C); // expected-note@-1 {{'C' is non-null}} @@ -165,8 +164,7 @@ void evalNonNullParamNonNullReturn(const Shape *S) { const auto *C = cast<Circle>(S); // expected-note@-1 {{Checked cast from 'Shape' to 'Circle' succeeds}} - // expected-note@-2 {{Assuming pointer value is null}} - // expected-note@-3 {{'C' initialized here}} + // expected-note@-2 {{'C' initialized here}} (void)(1 / !(bool)C); // expected-note@-1 {{'C' is non-null}} @@ -178,7 +176,6 @@ void evalNonNullParamNullReturn(const Shape *S) { const auto *C = dyn_cast_or_null<Circle>(S); // expected-note@-1 {{Assuming dynamic cast from 'Shape' to 'Circle' fails}} - // expected-note@-2 {{Assuming pointer value is null}} if (const auto *T = dyn_cast_or_null<Triangle>(S)) { // expected-note@-1 {{Assuming dynamic cast from 'Shape' to 'Triangle' succeeds}} @@ -207,9 +204,8 @@ void evalZeroParamNonNullReturnPointer(const Shape *S) { const auto *C = S->castAs<Circle>(); - // expected-note@-1 {{Assuming pointer value is null}} - // expected-note@-2 {{Checked cast to 'Circle' succeeds}} - // expected-note@-3 {{'C' initialized here}} + // expected-note@-1 {{Checked cast to 'Circle' succeeds}} + // expected-note@-2 {{'C' initialized here}} (void)(1 / !(bool)C); // expected-note@-1 {{'C' is non-null}}
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits