summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/utilities/memory
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2017-04-12 22:43:49 +0000
committerEric Fiselier <eric@efcs.ca>2017-04-12 22:43:49 +0000
commit34e38caa2fd9d5cd4689c1580d2abf18e85b9761 (patch)
tree9cfbd1ec6640ad8569336c7fc3dbcee43ff8ada8 /libcxx/test/std/utilities/memory
parent58c18f8f23f9ce7dc245dd4ae143c84eac3965f4 (diff)
downloadbcm5719-llvm-34e38caa2fd9d5cd4689c1580d2abf18e85b9761.tar.gz
bcm5719-llvm-34e38caa2fd9d5cd4689c1580d2abf18e85b9761.zip
Fix incorrectly qualified return type from unique_ptr::get_deleter().
For reference deleter types the const qualifier on the return type of get_deleter() should be ignored, and a non-const deleter should be returned. This patch fixes a bug where "const deleter_type&" is incorrectly formed. llvm-svn: 300121
Diffstat (limited to 'libcxx/test/std/utilities/memory')
-rw-r--r--libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp41
-rw-r--r--libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp41
2 files changed, 60 insertions, 22 deletions
diff --git a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp
index 4496740715a..a3bb1a0cc2a 100644
--- a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp
+++ b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp
@@ -15,23 +15,42 @@
#include <memory>
#include <cassert>
+#include "test_macros.h"
-struct Deleter
-{
- void operator()(void*) {}
+struct Deleter {
+ void operator()(void*) const {}
- int test() {return 5;}
- int test() const {return 6;}
+ int test() { return 5; }
+ int test() const { return 6; }
};
-int main()
-{
- {
+int main() {
+ {
std::unique_ptr<int[], Deleter> p;
assert(p.get_deleter().test() == 5);
- }
- {
+ }
+ {
const std::unique_ptr<int[], Deleter> p;
assert(p.get_deleter().test() == 6);
- }
+ }
+ {
+ typedef std::unique_ptr<int[], const Deleter&> UPtr;
+ const Deleter d;
+ UPtr p(nullptr, d);
+ const UPtr& cp = p;
+ ASSERT_SAME_TYPE(decltype(p.get_deleter()), const Deleter&);
+ ASSERT_SAME_TYPE(decltype(cp.get_deleter()), const Deleter&);
+ assert(p.get_deleter().test() == 6);
+ assert(cp.get_deleter().test() == 6);
+ }
+ {
+ typedef std::unique_ptr<int[], Deleter&> UPtr;
+ Deleter d;
+ UPtr p(nullptr, d);
+ const UPtr& cp = p;
+ ASSERT_SAME_TYPE(decltype(p.get_deleter()), Deleter&);
+ ASSERT_SAME_TYPE(decltype(cp.get_deleter()), Deleter&);
+ assert(p.get_deleter().test() == 5);
+ assert(cp.get_deleter().test() == 5);
+ }
}
diff --git a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp
index 5ed8a22b14c..3262abb5e28 100644
--- a/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp
+++ b/libcxx/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp
@@ -15,23 +15,42 @@
#include <memory>
#include <cassert>
+#include "test_macros.h"
-struct Deleter
-{
- void operator()(void*) {}
+struct Deleter {
+ void operator()(void*) const {}
- int test() {return 5;}
- int test() const {return 6;}
+ int test() { return 5; }
+ int test() const { return 6; }
};
-int main()
-{
- {
+int main() {
+ {
std::unique_ptr<int, Deleter> p;
assert(p.get_deleter().test() == 5);
- }
- {
+ }
+ {
const std::unique_ptr<int, Deleter> p;
assert(p.get_deleter().test() == 6);
- }
+ }
+ {
+ typedef std::unique_ptr<int, const Deleter&> UPtr;
+ const Deleter d;
+ UPtr p(nullptr, d);
+ const UPtr& cp = p;
+ ASSERT_SAME_TYPE(decltype(p.get_deleter()), const Deleter&);
+ ASSERT_SAME_TYPE(decltype(cp.get_deleter()), const Deleter&);
+ assert(p.get_deleter().test() == 6);
+ assert(cp.get_deleter().test() == 6);
+ }
+ {
+ typedef std::unique_ptr<int, Deleter&> UPtr;
+ Deleter d;
+ UPtr p(nullptr, d);
+ const UPtr& cp = p;
+ ASSERT_SAME_TYPE(decltype(p.get_deleter()), Deleter&);
+ ASSERT_SAME_TYPE(decltype(cp.get_deleter()), Deleter&);
+ assert(p.get_deleter().test() == 5);
+ assert(cp.get_deleter().test() == 5);
+ }
}
OpenPOWER on IntegriCloud