================
@@ -0,0 +1,24 @@
+// RUN: %clang -fsyntax-only -Xclang -analyze -Xclang 
-analyzer-checker=cplusplus.PlacementNew -Xclang -verify -std=c++17 %s
+
+#include <new>
+
+void test_exact_size() {
+    void *buf = ::operator new(sizeof(int)*2);
+    int *placement_int = new (buf) int[2]; // no-warning
+    placement_int[0] = 42;
+    ::operator delete(buf);
+}
+
+void test_undersize() {
+    void *buf = ::operator new(sizeof(int)*1);
+    int *placement_int = new (buf) int[2]; // expected-warning {{Storage 
provided to placement new is only 4 bytes, whereas the allocated type requires 
8 bytes [cplusplus.PlacementNew]}}
+    placement_int[0] = 42;
+    ::operator delete(buf);
+}
+
+void test_oversize() {
+    void *buf = ::operator new(sizeof(int)*4);
+    int *placement_int = new (buf) int[2]; // no-warning
+    placement_int[0] = 42;
+    ::operator delete(buf);
+}
----------------
NagyDonat wrote:

What is the reason for adding these tests (in addition to the tests that 
already exist in `placement-new.cpp`)? As far as I see there is no significant 
difference between these and the tests that already exist in 
`placement-new.cpp`.

Also note that the tests of the static analyzer are always placed in the 
`clang/test/Analysis` directory and not the `clang/test/SemaCXX` directory.

https://github.com/llvm/llvm-project/pull/150161
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to