// 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 | |
} |