[analyzer] Enable PlacementNewChecker by default

This commit is contained in:
Gabor Marton 2020-01-21 11:39:36 +01:00
parent 89e6601fb1
commit bc29069dc4
3 changed files with 24 additions and 8 deletions

View File

@ -470,6 +470,12 @@ def NewDeleteLeaksChecker : Checker<"NewDeleteLeaks">,
Dependencies<[NewDeleteChecker]>,
Documentation<HasDocumentation>;
def PlacementNewChecker : Checker<"PlacementNew">,
HelpText<"Check if default placement new is provided with pointers to "
"sufficient storage capacity">,
Dependencies<[NewDeleteChecker]>,
Documentation<HasDocumentation>;
def CXXSelfAssignmentChecker : Checker<"SelfAssignment">,
HelpText<"Checks C++ copy and move assignment operators for self assignment">,
Documentation<NotDocumented>,
@ -615,12 +621,6 @@ def MismatchedIteratorChecker : Checker<"MismatchedIterator">,
Dependencies<[IteratorModeling]>,
Documentation<HasAlphaDocumentation>;
def PlacementNewChecker : Checker<"PlacementNew">,
HelpText<"Check if default placement new is provided with pointers to "
"sufficient storage capacity">,
Dependencies<[NewDeleteChecker]>,
Documentation<HasDocumentation>;
} // end: "alpha.cplusplus"

View File

@ -1,7 +1,7 @@
// RUN: %clang_analyze_cc1 -std=c++11 %s \
// RUN: -analyzer-checker=core \
// RUN: -analyzer-checker=cplusplus.NewDelete \
// RUN: -analyzer-checker=alpha.cplusplus.PlacementNew \
// RUN: -analyzer-checker=cplusplus.PlacementNew \
// RUN: -analyzer-output=text -verify \
// RUN: -triple x86_64-unknown-linux-gnu

View File

@ -1,7 +1,7 @@
// RUN: %clang_analyze_cc1 -std=c++11 %s \
// RUN: -analyzer-checker=core \
// RUN: -analyzer-checker=cplusplus.NewDelete \
// RUN: -analyzer-checker=alpha.cplusplus.PlacementNew \
// RUN: -analyzer-checker=cplusplus.PlacementNew \
// RUN: -analyzer-output=text -verify \
// RUN: -triple x86_64-unknown-linux-gnu
@ -93,6 +93,22 @@ void f() {
}
} // namespace testPtrToArrayWithOffsetAsPlace
namespace testZeroSize {
void f() {
int buf[3]; // expected-note {{'buf' initialized here}}
long *lp = ::new (buf + 3) long; // expected-warning{{Storage provided to placement new is only 0 bytes, whereas the allocated type requires 8 bytes}} expected-note 1 {{}}
(void)lp;
}
} // namespace testZeroSize
namespace testNegativeSize {
void f() {
int buf[3]; // expected-note {{'buf' initialized here}}
long *lp = ::new (buf + 4) long; // expected-warning{{Storage provided to placement new is only -4 bytes, whereas the allocated type requires 8 bytes}} expected-note 1 {{}}
(void)lp;
}
} // namespace testNegativeSize
namespace testHeapAllocatedBuffer {
void g2() {
char *buf = new char[2]; // expected-note {{'buf' initialized here}}