From 952eddef9aff85b1e92626e89baaf7a360e2ac85 Mon Sep 17 00:00:00 2001 From: dim Date: Sun, 22 Dec 2013 00:07:40 +0000 Subject: Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3): https://llvm.org/svn/llvm-project/cfe/branches/release_34@197841 --- test/Analysis/derived-to-base.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'test/Analysis/derived-to-base.cpp') diff --git a/test/Analysis/derived-to-base.cpp b/test/Analysis/derived-to-base.cpp index 0664189..e9c7ca8 100644 --- a/test/Analysis/derived-to-base.cpp +++ b/test/Analysis/derived-to-base.cpp @@ -450,3 +450,28 @@ namespace PR15394 { } }; +namespace Bug16309 { + struct Incomplete; + + struct Base { virtual ~Base(); }; + + struct Derived : public Base { int x; }; + + void* f(Incomplete *i) { + Base *b = reinterpret_cast(i); + // This used to crash because of the reinterpret_cast above. + Derived *d = dynamic_cast(b); + return d; + } + + // And check that reinterpret+dynamic casts work correctly after the fix. + void g() { + Derived d; + d.x = 47; + Base *b = &d; + Incomplete *i = reinterpret_cast(b); + Base *b2 = reinterpret_cast(i); + Derived *d2 = dynamic_cast(b2); + clang_analyzer_eval(d2->x == 47); // expected-warning{{TRUE}} + } +} -- cgit v1.1