summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std
diff options
context:
space:
mode:
authorMarshall Clow <mclow.lists@gmail.com>2017-01-24 23:09:12 +0000
committerMarshall Clow <mclow.lists@gmail.com>2017-01-24 23:09:12 +0000
commit63b560be69c0660b427efe903689f410e1f02967 (patch)
tree0f5df4aa86b5886bb710a1465dd2f1a81e24ac8b /libcxx/test/std
parentb10fb96541bc45aea71c8652bb1786899826f7ad (diff)
downloadbcm5719-llvm-63b560be69c0660b427efe903689f410e1f02967.tar.gz
bcm5719-llvm-63b560be69c0660b427efe903689f410e1f02967.zip
Change the return type of emplace_[front|back] back to void when building with C++14 or before. Resolves PR31680.
llvm-svn: 292990
Diffstat (limited to 'libcxx/test/std')
-rw-r--r--libcxx/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp14
-rw-r--r--libcxx/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp9
-rw-r--r--libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp9
-rw-r--r--libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp21
-rw-r--r--libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp19
-rw-r--r--libcxx/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp20
-rw-r--r--libcxx/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp20
-rw-r--r--libcxx/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp30
-rw-r--r--libcxx/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp32
9 files changed, 165 insertions, 9 deletions
diff --git a/libcxx/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp b/libcxx/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp
index 77d822a0794..4142bc3694d 100644
--- a/libcxx/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp
+++ b/libcxx/test/std/containers/container.adaptors/queue/queue.defn/emplace.pass.cpp
@@ -12,25 +12,35 @@
// <queue>
// template <class... Args> reference emplace(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
+
#include <queue>
#include <cassert>
+#include "test_macros.h"
+
#include "../../../Emplaceable.h"
int main()
{
typedef Emplaceable T;
std::queue<Emplaceable> q;
+#if TEST_STD_VER > 14
T& r1 = q.emplace(1, 2.5);
assert(&r1 == &q.back());
T& r2 = q.emplace(2, 3.5);
assert(&r2 == &q.back());
T& r3 = q.emplace(3, 4.5);
assert(&r3 == &q.back());
+ assert(&r1 == &q.front());
+#else
+ q.emplace(1, 2.5);
+ q.emplace(2, 3.5);
+ q.emplace(3, 4.5);
+#endif
+
assert(q.size() == 3);
assert(q.front() == Emplaceable(1, 2.5));
assert(q.back() == Emplaceable(3, 4.5));
- assert(&r3 == &q.back());
- assert(&r1 == &q.front());
}
diff --git a/libcxx/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp b/libcxx/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp
index 71fe903b74a..8b19972eb32 100644
--- a/libcxx/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp
+++ b/libcxx/test/std/containers/container.adaptors/stack/stack.defn/emplace.pass.cpp
@@ -12,22 +12,31 @@
// <stack>
// template <class... Args> reference emplace(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
#include <stack>
#include <cassert>
+#include "test_macros.h"
+
#include "../../../Emplaceable.h"
int main()
{
typedef Emplaceable T;
std::stack<Emplaceable> q;
+#if TEST_STD_VER > 14
T& r1 = q.emplace(1, 2.5);
assert(&r1 == &q.top());
T& r2 = q.emplace(2, 3.5);
assert(&r2 == &q.top());
T& r3 = q.emplace(3, 4.5);
assert(&r3 == &q.top());
+#else
+ q.emplace(1, 2.5);
+ q.emplace(2, 3.5);
+ q.emplace(3, 4.5);
+#endif
assert(q.size() == 3);
assert(q.top() == Emplaceable(3, 4.5));
}
diff --git a/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp b/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp
index e3a35362b18..13773fb1f5f 100644
--- a/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp
+++ b/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_back.pass.cpp
@@ -12,6 +12,7 @@
// <deque>
// template <class... Args> reference emplace_back(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
#include <deque>
#include <cstddef>
@@ -49,15 +50,21 @@ void
test(C& c1)
{
typedef typename C::iterator I;
- typedef typename C::reference Ref;
std::size_t c1_osize = c1.size();
+#if TEST_STD_VER > 14
+ typedef typename C::reference Ref;
Ref ref = c1.emplace_back(Emplaceable(1, 2.5));
+#else
+ c1.emplace_back(Emplaceable(1, 2.5));
+#endif
assert(c1.size() == c1_osize + 1);
assert(distance(c1.begin(), c1.end())
== static_cast<std::ptrdiff_t>(c1.size()));
I i = c1.end();
assert(*--i == Emplaceable(1, 2.5));
+#if TEST_STD_VER > 14
assert(&(*i) == &ref);
+#endif
}
template <class C>
diff --git a/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp b/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp
index 26c700de725..4c272be48da 100644
--- a/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp
+++ b/libcxx/test/std/containers/sequences/deque/deque.modifiers/emplace_front.pass.cpp
@@ -12,6 +12,7 @@
// <deque>
// template <class... Args> reference emplace_front(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
#include <deque>
#include <cstddef>
@@ -20,6 +21,7 @@
#include "test_macros.h"
#include "../../../Emplaceable.h"
#include "min_allocator.h"
+#include "test_allocator.h"
template <class C>
C
@@ -48,15 +50,21 @@ void
test(C& c1)
{
typedef typename C::iterator I;
- typedef typename C::reference Ref;
std::size_t c1_osize = c1.size();
+#if TEST_STD_VER > 14
+ typedef typename C::reference Ref;
Ref res_ref = c1.emplace_front(Emplaceable(1, 2.5));
+#else
+ c1.emplace_front(Emplaceable(1, 2.5));
+#endif
assert(c1.size() == c1_osize + 1);
assert(distance(c1.begin(), c1.end())
== static_cast<std::ptrdiff_t>(c1.size()));
I i = c1.begin();
assert(*i == Emplaceable(1, 2.5));
+#if TEST_STD_VER > 14
assert(&res_ref == &(*i));
+#endif
}
template <class C>
@@ -84,4 +92,15 @@ int main()
for (int j = 0; j < N; ++j)
testN<std::deque<Emplaceable, min_allocator<Emplaceable>> >(rng[i], rng[j]);
}
+ {
+ std::deque<Tag_X, TaggingAllocator<Tag_X>> c;
+ c.emplace_front();
+ assert(c.size() == 1);
+ c.emplace_front(1, 2, 3);
+ assert(c.size() == 2);
+ c.emplace_front();
+ assert(c.size() == 3);
+ c.emplace_front(1, 2, 3);
+ assert(c.size() == 4);
+ }
}
diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp
index 589e71894b8..34591a1e196 100644
--- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp
+++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.modifiers/emplace_front.pass.cpp
@@ -12,10 +12,13 @@
// <forward_list>
// template <class... Args> reference emplace_front(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
#include <forward_list>
#include <cassert>
+#include "test_macros.h"
+
#include "../../../Emplaceable.h"
#include "min_allocator.h"
@@ -25,6 +28,7 @@ int main()
typedef Emplaceable T;
typedef std::forward_list<T> C;
C c;
+#if TEST_STD_VER > 14
T& r1 = c.emplace_front();
assert(c.front() == Emplaceable());
assert(&r1 == &c.front());
@@ -32,6 +36,13 @@ int main()
T& r2 = c.emplace_front(1, 2.5);
assert(c.front() == Emplaceable(1, 2.5));
assert(&r2 == &c.front());
+#else
+ c.emplace_front();
+ assert(c.front() == Emplaceable());
+ assert(distance(c.begin(), c.end()) == 1);
+ c.emplace_front(1, 2.5);
+ assert(c.front() == Emplaceable(1, 2.5));
+#endif
assert(*next(c.begin()) == Emplaceable());
assert(distance(c.begin(), c.end()) == 2);
}
@@ -39,6 +50,7 @@ int main()
typedef Emplaceable T;
typedef std::forward_list<T, min_allocator<T>> C;
C c;
+#if TEST_STD_VER > 14
T& r1 = c.emplace_front();
assert(c.front() == Emplaceable());
assert(&r1 == &c.front());
@@ -46,6 +58,13 @@ int main()
T& r2 = c.emplace_front(1, 2.5);
assert(c.front() == Emplaceable(1, 2.5));
assert(&r2 == &c.front());
+#else
+ c.emplace_front();
+ assert(c.front() == Emplaceable());
+ assert(distance(c.begin(), c.end()) == 1);
+ c.emplace_front(1, 2.5);
+ assert(c.front() == Emplaceable(1, 2.5));
+#endif
assert(*next(c.begin()) == Emplaceable());
assert(distance(c.begin(), c.end()) == 2);
}
diff --git a/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp b/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp
index 2aae2b9b09e..c63b0d8fbdb 100644
--- a/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp
+++ b/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_back.pass.cpp
@@ -12,10 +12,12 @@
// <list>
// template <class... Args> reference emplace_back(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
#include <list>
#include <cassert>
+#include "test_macros.h"
#include "min_allocator.h"
class A
@@ -37,6 +39,7 @@ int main()
{
{
std::list<A> c;
+#if TEST_STD_VER > 14
A& r1 = c.emplace_back(2, 3.5);
assert(c.size() == 1);
assert(&r1 == &c.back());
@@ -45,6 +48,14 @@ int main()
A& r2 = c.emplace_back(3, 4.5);
assert(c.size() == 2);
assert(&r2 == &c.back());
+#else
+ c.emplace_back(2, 3.5);
+ assert(c.size() == 1);
+ assert(c.front().geti() == 2);
+ assert(c.front().getd() == 3.5);
+ c.emplace_back(3, 4.5);
+ assert(c.size() == 2);
+#endif
assert(c.front().geti() == 2);
assert(c.front().getd() == 3.5);
assert(c.back().geti() == 3);
@@ -52,6 +63,7 @@ int main()
}
{
std::list<A, min_allocator<A>> c;
+#if TEST_STD_VER > 14
A& r1 = c.emplace_back(2, 3.5);
assert(c.size() == 1);
assert(&r1 == &c.back());
@@ -60,6 +72,14 @@ int main()
A& r2 = c.emplace_back(3, 4.5);
assert(c.size() == 2);
assert(&r2 == &c.back());
+#else
+ c.emplace_back(2, 3.5);
+ assert(c.size() == 1);
+ assert(c.front().geti() == 2);
+ assert(c.front().getd() == 3.5);
+ c.emplace_back(3, 4.5);
+ assert(c.size() == 2);
+#endif
assert(c.front().geti() == 2);
assert(c.front().getd() == 3.5);
assert(c.back().geti() == 3);
diff --git a/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp b/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp
index 994dac258f8..a9be19e6f94 100644
--- a/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp
+++ b/libcxx/test/std/containers/sequences/list/list.modifiers/emplace_front.pass.cpp
@@ -12,6 +12,7 @@
// <list>
// template <class... Args> reference emplace_front(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
#include <list>
#include <cassert>
@@ -37,6 +38,7 @@ int main()
{
{
std::list<A> c;
+#if TEST_STD_VER > 14
A& r1 = c.emplace_front(2, 3.5);
assert(c.size() == 1);
assert(&r1 == &c.front());
@@ -45,13 +47,23 @@ int main()
A& r2 = c.emplace_front(3, 4.5);
assert(c.size() == 2);
assert(&r2 == &c.front());
+#else
+ c.emplace_front(2, 3.5);
+ assert(c.size() == 1);
+ assert(c.front().geti() == 2);
+ assert(c.front().getd() == 3.5);
+ c.emplace_front(3, 4.5);
+ assert(c.size() == 2);
+#endif
assert(c.front().geti() == 3);
assert(c.front().getd() == 4.5);
assert(c.back().geti() == 2);
assert(c.back().getd() == 3.5);
}
+
{
std::list<A, min_allocator<A>> c;
+#if TEST_STD_VER > 14
A& r1 = c.emplace_front(2, 3.5);
assert(c.size() == 1);
assert(&r1 == &c.front());
@@ -60,6 +72,14 @@ int main()
A& r2 = c.emplace_front(3, 4.5);
assert(c.size() == 2);
assert(&r2 == &c.front());
+#else
+ c.emplace_front(2, 3.5);
+ assert(c.size() == 1);
+ assert(c.front().geti() == 2);
+ assert(c.front().getd() == 3.5);
+ c.emplace_front(3, 4.5);
+ assert(c.size() == 2);
+#endif
assert(c.front().geti() == 3);
assert(c.front().getd() == 4.5);
assert(c.back().geti() == 2);
diff --git a/libcxx/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp
index 24005bec82d..81a8ae47516 100644
--- a/libcxx/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp
+++ b/libcxx/test/std/containers/sequences/vector.bool/emplace_back.pass.cpp
@@ -12,17 +12,20 @@
// vector.bool
// template <class... Args> reference emplace_back(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
#include <vector>
#include <cassert>
+#include "test_macros.h"
#include "min_allocator.h"
int main()
{
{
typedef std::vector<bool> C;
- typedef C::reference Ref;
C c;
+#if TEST_STD_VER > 14
+ typedef C::reference Ref;
Ref r1 = c.emplace_back();
assert(c.size() == 1);
assert(c.front() == false);
@@ -36,19 +39,27 @@ int main()
r2 = false;
assert(c.back() == false);
r2 = true;
- Ref r3 = c.emplace_back(1 == 1);
+#else
+ c.emplace_back();
+ assert(c.size() == 1);
+ assert(c.front() == false);
+ c.emplace_back(true);
+ assert(c.size() == 2);
+ assert(c.front() == false);
+ assert(c.back() == true);
+#endif
+ c.emplace_back(1 == 1);
assert(c.size() == 3);
assert(c.front() == false);
assert(c[1] == true);
assert(c.back() == true);
- r3 = false;
- assert(c.back() == false);
}
{
typedef std::vector<bool, min_allocator<bool>> C;
- typedef C::reference Ref;
C c;
+#if TEST_STD_VER > 14
+ typedef C::reference Ref;
Ref r1 = c.emplace_back();
assert(c.size() == 1);
assert(c.front() == false);
@@ -62,6 +73,15 @@ int main()
r2 = false;
assert(c.back() == false);
r2 = true;
+#else
+ c.emplace_back();
+ assert(c.size() == 1);
+ assert(c.front() == false);
+ c.emplace_back(true);
+ assert(c.size() == 2);
+ assert(c.front() == false);
+ assert(c.back() == true);
+#endif
c.emplace_back(1 == 1);
assert(c.size() == 3);
assert(c.front() == false);
diff --git a/libcxx/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp b/libcxx/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp
index 2fece8c78c7..f70c9b9abec 100644
--- a/libcxx/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp
+++ b/libcxx/test/std/containers/sequences/vector/vector.modifiers/emplace_back.pass.cpp
@@ -12,9 +12,11 @@
// <vector>
// template <class... Args> reference emplace_back(Args&&... args);
+// return type is 'reference' in C++17; 'void' before
#include <vector>
#include <cassert>
+#include "test_macros.h"
#include "test_allocator.h"
#include "min_allocator.h"
#include "test_allocator.h"
@@ -56,6 +58,7 @@ int main()
{
{
std::vector<A> c;
+#if TEST_STD_VER > 14
A& r1 = c.emplace_back(2, 3.5);
assert(c.size() == 1);
assert(&r1 == &c.back());
@@ -65,6 +68,15 @@ int main()
A& r2 = c.emplace_back(3, 4.5);
assert(c.size() == 2);
assert(&r2 == &c.back());
+#else
+ c.emplace_back(2, 3.5);
+ assert(c.size() == 1);
+ assert(c.front().geti() == 2);
+ assert(c.front().getd() == 3.5);
+ assert(is_contiguous_container_asan_correct(c));
+ c.emplace_back(3, 4.5);
+ assert(c.size() == 2);
+#endif
assert(c.front().geti() == 2);
assert(c.front().getd() == 3.5);
assert(c.back().geti() == 3);
@@ -73,6 +85,7 @@ int main()
}
{
std::vector<A, limited_allocator<A, 4> > c;
+#if TEST_STD_VER > 14
A& r1 = c.emplace_back(2, 3.5);
assert(c.size() == 1);
assert(&r1 == &c.back());
@@ -82,6 +95,15 @@ int main()
A& r2 = c.emplace_back(3, 4.5);
assert(c.size() == 2);
assert(&r2 == &c.back());
+#else
+ c.emplace_back(2, 3.5);
+ assert(c.size() == 1);
+ assert(c.front().geti() == 2);
+ assert(c.front().getd() == 3.5);
+ assert(is_contiguous_container_asan_correct(c));
+ c.emplace_back(3, 4.5);
+ assert(c.size() == 2);
+#endif
assert(c.front().geti() == 2);
assert(c.front().getd() == 3.5);
assert(c.back().geti() == 3);
@@ -90,6 +112,7 @@ int main()
}
{
std::vector<A, min_allocator<A>> c;
+#if TEST_STD_VER > 14
A& r1 = c.emplace_back(2, 3.5);
assert(c.size() == 1);
assert(&r1 == &c.back());
@@ -99,6 +122,15 @@ int main()
A& r2 = c.emplace_back(3, 4.5);
assert(c.size() == 2);
assert(&r2 == &c.back());
+#else
+ c.emplace_back(2, 3.5);
+ assert(c.size() == 1);
+ assert(c.front().geti() == 2);
+ assert(c.front().getd() == 3.5);
+ assert(is_contiguous_container_asan_correct(c));
+ c.emplace_back(3, 4.5);
+ assert(c.size() == 2);
+#endif
assert(c.front().geti() == 2);
assert(c.front().getd() == 3.5);
assert(c.back().geti() == 3);
OpenPOWER on IntegriCloud