aboutsummaryrefslogtreecommitdiff
path: root/test/Analysis/misc-ps-cxx0x.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2012-07-18 05:57:33 +0000
committerTed Kremenek <kremenek@apple.com>2012-07-18 05:57:33 +0000
commit21625c69e88d232e71a3bd4ba9d4bbb484183bf1 (patch)
treeb9f871417764a4def7d76bd7b585029dd73a09a2 /test/Analysis/misc-ps-cxx0x.cpp
parent88237bf587581026dcfc8386abf055cb201aa487 (diff)
Fix crash in RegionStoreManager::evalDerivedToBase() due to not handling references
(in uses of dynamic_cast<>). Fixes <rdar://problem/11817693>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160427 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis/misc-ps-cxx0x.cpp')
-rw-r--r--test/Analysis/misc-ps-cxx0x.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/test/Analysis/misc-ps-cxx0x.cpp b/test/Analysis/misc-ps-cxx0x.cpp
index b4dee3122e..7712bb8dc3 100644
--- a/test/Analysis/misc-ps-cxx0x.cpp
+++ b/test/Analysis/misc-ps-cxx0x.cpp
@@ -73,3 +73,18 @@ void test2() {
struct RDar11178609 {
~RDar11178609() = delete;
};
+
+// Tests that dynamic_cast handles references to C++ classes. Previously
+// this crashed.
+class rdar11817693_BaseBase {};
+class rdar11817693_BaseInterface {};
+class rdar11817693_Base : public rdar11817693_BaseBase, public rdar11817693_BaseInterface {};
+class rdar11817693 : public rdar11817693_Base {
+ virtual void operator=(const rdar11817693_BaseBase& src);
+ void operator=(const rdar11817693& src);
+};
+void rdar11817693::operator=(const rdar11817693& src) {
+ operator=(dynamic_cast<const rdar11817693_BaseBase&>(src));
+}
+
+