diff options
author | Ted Kremenek <kremenek@apple.com> | 2012-07-18 05:57:33 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2012-07-18 05:57:33 +0000 |
commit | 46dcfc94311e5cd95e019c33566895c6e37f9b46 (patch) | |
tree | fc871eaaf6e838282ad14bc50f672c1818b87822 /clang/test/Analysis/misc-ps-cxx0x.cpp | |
parent | 0d10225fa2811cf719552ed95d2e742c08921276 (diff) | |
download | bcm5719-llvm-46dcfc94311e5cd95e019c33566895c6e37f9b46.tar.gz bcm5719-llvm-46dcfc94311e5cd95e019c33566895c6e37f9b46.zip |
Fix crash in RegionStoreManager::evalDerivedToBase() due to not handling references
(in uses of dynamic_cast<>).
Fixes <rdar://problem/11817693>.
llvm-svn: 160427
Diffstat (limited to 'clang/test/Analysis/misc-ps-cxx0x.cpp')
-rw-r--r-- | clang/test/Analysis/misc-ps-cxx0x.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/test/Analysis/misc-ps-cxx0x.cpp b/clang/test/Analysis/misc-ps-cxx0x.cpp index b4dee3122e2..7712bb8dc3b 100644 --- a/clang/test/Analysis/misc-ps-cxx0x.cpp +++ b/clang/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)); +} + + |