================ @@ -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