aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@suse.de>2007-10-28 16:03:06 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2007-10-28 16:03:06 +0000
commite85b4fa7b56003e26a98c54247d79365b740bb6d (patch)
tree69db8b00599e34a5b4a85a68a770c02be23d4e53
parent77bd31de7ef25e0e7cce86d26d882815f9536d6b (diff)
downloadgcc-e85b4fa7b56003e26a98c54247d79365b740bb6d.zip
gcc-e85b4fa7b56003e26a98c54247d79365b740bb6d.tar.gz
gcc-e85b4fa7b56003e26a98c54247d79365b740bb6d.tar.bz2
stl_uninitialized.h (uninitialized_copy): Use ::new and value_type per the letter of the standard.
2007-10-28 Paolo Carlini <pcarlini@suse.de> * include/bits/stl_uninitialized.h (uninitialized_copy): Use ::new and value_type per the letter of the standard. * testsuite/20_util/specialized_algorithms/uninitialized_copy/ move_iterators/1.cc: New. * testsuite/20_util/specialized_algorithms/16505.cc: Move to... * testsuite/20_util/specialized_algorithms/uninitialized_fill_n/ 16505.cc: ... here. * testsuite/20_util/specialized_algorithms/32158.cc: Move to... * testsuite/20_util/specialized_algorithms/uninitialized_fill/ 32158.cc: ... here. * include/bits/stl_construct.h (_Construct(_T1*)): Remove, unused. From-SVN: r129698
-rw-r--r--libstdc++-v3/ChangeLog16
-rw-r--r--libstdc++-v3/include/bits/stl_construct.h15
-rw-r--r--libstdc++-v3/include/bits/stl_uninitialized.h3
-rw-r--r--libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc67
-rw-r--r--libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/32158.cc (renamed from libstdc++-v3/testsuite/20_util/specialized_algorithms/32158.cc)0
-rw-r--r--libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/16505.cc (renamed from libstdc++-v3/testsuite/20_util/specialized_algorithms/16505.cc)0
6 files changed, 85 insertions, 16 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index cd2acd9..aa27648 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,19 @@
+2007-10-28 Paolo Carlini <pcarlini@suse.de>
+
+ * include/bits/stl_uninitialized.h (uninitialized_copy): Use
+ ::new and value_type per the letter of the standard.
+ * testsuite/20_util/specialized_algorithms/uninitialized_copy/
+ move_iterators/1.cc: New.
+
+ * testsuite/20_util/specialized_algorithms/16505.cc: Move to...
+ * testsuite/20_util/specialized_algorithms/uninitialized_fill_n/
+ 16505.cc: ... here.
+ * testsuite/20_util/specialized_algorithms/32158.cc: Move to...
+ * testsuite/20_util/specialized_algorithms/uninitialized_fill/
+ 32158.cc: ... here.
+
+ * include/bits/stl_construct.h (_Construct(_T1*)): Remove, unused.
+
2007-10-27 Paolo Carlini <pcarlini@suse.de>
* include/bits/stl_algobase.h (struct __miter_base): Add.
diff --git a/libstdc++-v3/include/bits/stl_construct.h b/libstdc++-v3/include/bits/stl_construct.h
index 188efa9..4603834 100644
--- a/libstdc++-v3/include/bits/stl_construct.h
+++ b/libstdc++-v3/include/bits/stl_construct.h
@@ -83,21 +83,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
/**
* @if maint
- * Constructs an object in existing memory by invoking an allocated
- * object's default constructor (no initializers).
- * @endif
- */
- template<typename _T1>
- inline void
- _Construct(_T1* __p)
- {
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // 402. wrong new expression in [some_]allocator::construct
- ::new(static_cast<void*>(__p)) _T1();
- }
-
- /**
- * @if maint
* Destroy the object pointed to by a pointer type.
* @endif
*/
diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h
index c564c21..d3e7a2c8 100644
--- a/libstdc++-v3/include/bits/stl_uninitialized.h
+++ b/libstdc++-v3/include/bits/stl_uninitialized.h
@@ -76,7 +76,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
try
{
for (; __first != __last; ++__first, ++__cur)
- std::_Construct(&*__cur, *__first);
+ ::new(static_cast<void*>(&*__cur)) typename
+ iterator_traits<_ForwardIterator>::value_type(*__first);
return __cur;
}
catch(...)
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
new file mode 100644
index 0000000..11e07a7
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
@@ -0,0 +1,67 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#undef _GLIBCXX_CONCEPT_CHECKS
+#define _GLIBCXX_TESTSUITE_ALLOW_RVALREF_ALIASING
+
+#include <algorithm>
+#include <iterator>
+#include <testsuite_hooks.h>
+#include <testsuite_iterators.h>
+#include <testsuite_rvalref.h>
+
+using __gnu_test::test_container;
+using __gnu_test::input_iterator_wrapper;
+using __gnu_test::forward_iterator_wrapper;
+using __gnu_test::rvalstruct;
+using std::uninitialized_copy;
+
+typedef test_container<rvalstruct, input_iterator_wrapper> container_in;
+typedef test_container<rvalstruct, forward_iterator_wrapper> container_out;
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ int inarray[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+ const int size = sizeof(inarray) / sizeof(int);
+
+ rvalstruct in[size], out[size];
+ std::copy(inarray, inarray + size, in);
+
+ container_in incon(in, in + size);
+ container_out outcon(out, out + size);
+
+ uninitialized_copy(std::move_iterator<input_iterator_wrapper<rvalstruct> >(incon.begin()),
+ std::move_iterator<input_iterator_wrapper<rvalstruct> >(incon.end()),
+ outcon.begin());
+ VERIFY( std::equal(out, out + size, inarray) );
+ for (int z = 0; z < size; ++z)
+ VERIFY( out[z].valid );
+ for (int z = 0; z < size; ++z)
+ VERIFY( !in[z].valid );
+}
+
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/32158.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/32158.cc
index 1f9867e..1f9867e 100644
--- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/32158.cc
+++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/32158.cc
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/16505.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/16505.cc
index b20c049..b20c049 100644
--- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/16505.cc
+++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/16505.cc