[analyzer] Enable PlacementNewChecker by default
authorGabor Marton <gabor.marton@ericsson.com>
Tue, 21 Jan 2020 10:39:36 +0000 (11:39 +0100)
committerGabor Marton <gabor.marton@ericsson.com>
Tue, 21 Jan 2020 12:23:10 +0000 (13:23 +0100)
clang/include/clang/StaticAnalyzer/Checkers/Checkers.td
clang/test/Analysis/placement-new-user-defined.cpp
clang/test/Analysis/placement-new.cpp

index d235273..fc1529f 100644 (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"
 
 
index 47f0b45..b3fe470 100644 (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
 
index 0f52484..37102b8 100644 (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}}