mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-19 06:31:18 +00:00
Fix a null pointer dereference when copying a null polymorphic pointer.
This bug only bit the C++98 build bots because all of the actual uses really do move. ;] But not *quite* ready to do the whole C++11 switch yet, so clean it up. Also add a unit test that catches this immediately. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194548 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
29f1788de9
commit
3c3f6be0c8
@ -39,7 +39,7 @@ template <typename T> class polymorphic_ptr {
|
||||
|
||||
public:
|
||||
polymorphic_ptr(T *ptr = 0) : ptr(ptr) {}
|
||||
polymorphic_ptr(const polymorphic_ptr &arg) : ptr(arg->clone()) {}
|
||||
polymorphic_ptr(const polymorphic_ptr &arg) : ptr(arg ? arg->clone() : 0) {}
|
||||
#if LLVM_HAS_RVALUE_REFERENCES
|
||||
polymorphic_ptr(polymorphic_ptr &&arg) : ptr(arg.take()) {}
|
||||
#endif
|
||||
|
@ -82,6 +82,12 @@ TEST(polymorphic_ptr_test, Basic) {
|
||||
EXPECT_FALSE(!p3);
|
||||
EXPECT_NE(s, &*p3);
|
||||
EXPECT_EQ(42, p3->x);
|
||||
|
||||
// Force copies of null without trying to dereference anything.
|
||||
polymorphic_ptr<S> null_copy = dummy_copy(polymorphic_ptr<S>(null));
|
||||
EXPECT_FALSE((bool)null_copy);
|
||||
EXPECT_TRUE(!null_copy);
|
||||
EXPECT_EQ(null, null_copy);
|
||||
}
|
||||
|
||||
struct Base {
|
||||
|
Loading…
x
Reference in New Issue
Block a user