| // RUN: %clang_analyze_cc1 -analyzer-checker=core -std=c++11 -verify %s | |
| // expected-no-diagnostics | |
| typedef __typeof(sizeof(int)) size_t; | |
| void *operator new(size_t size, void *ptr); | |
| struct B { | |
| virtual void foo(); | |
| }; | |
| struct D : public B { | |
| virtual void foo() override {} | |
| }; | |
| void test_ub() { | |
| // FIXME: Potentially warn because this code is pretty weird. | |
| B b; | |
| new (&b) D; | |
| b.foo(); // no-crash | |
| } | |
| void test_non_ub() { | |
| char c[sizeof(D)]; // Should be enough storage. | |
| new (c) D; | |
| ((B *)c)->foo(); // no-crash | |
| } |