new file mode 100644
@@ -0,0 +1,70 @@
+// { dg-do run { target c++11 } }
+
+#include <deque>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ std::deque<int> c;
+ std::deque<int>::iterator pos;
+
+ // libstdc++/52799
+ pos = c.emplace(c.begin());
+ VERIFY( c.size() == 1 );
+ VERIFY( c[0] == 0 );
+ VERIFY( pos == c.begin() );
+ pos = c.emplace(c.begin(), 2);
+ VERIFY( c.size() == 2 );
+ VERIFY( c[0] == 2 );
+ VERIFY( c[1] == 0 );
+ VERIFY( pos == c.begin() );
+ pos = c.emplace(c.end(), 3);
+ VERIFY( c.size() == 3 );
+ VERIFY( c[0] == 2 );
+ VERIFY( c[1] == 0 );
+ VERIFY( c[2] == 3 );
+ VERIFY( pos == --c.end() );
+
+ // const_iterator
+ pos = c.emplace(c.cbegin());
+ VERIFY( c.size() == 4 );
+ VERIFY( c[0] == 0 );
+ VERIFY( c[1] == 2 );
+ VERIFY( pos == c.cbegin() );
+ pos = c.emplace(c.cbegin() + 2, 22);
+ VERIFY( c.size() == 5 );
+ VERIFY( c[0] == 0 );
+ VERIFY( c[1] == 2 );
+ VERIFY( c[2] == 22 );
+ VERIFY( pos == c.cbegin() + 2 );
+}
+
+struct V
+{
+ explicit V(int a, int b = 0) : val(a+b) { }
+ int val;
+};
+
+void
+test02()
+{
+ std::deque<V> c;
+ std::deque<V>::iterator pos;
+
+ pos = c.emplace(c.end(), 1);
+ VERIFY( c.size() == 1 );
+ VERIFY( c[0].val == 1 );
+ VERIFY( pos == --c.end() );
+ pos = c.emplace(c.cend(), 2, 3);
+ VERIFY( c.size() == 2 );
+ VERIFY( c[0].val == 1 );
+ VERIFY( c[1].val == 5 );
+ VERIFY( pos == --c.cend() );
+}
+
+int main()
+{
+ test01();
+ test02();
+}
deleted file mode 100644
@@ -1,27 +0,0 @@
-// { dg-do compile { target c++11 } }
-
-// Copyright (C) 2012-2023 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 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even 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 COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <deque>
-
-// libstdc++/52799
-int main()
-{
- std::deque<int> d;
- d.emplace(d.begin());
-}
deleted file mode 100644
@@ -1,26 +0,0 @@
-// { dg-do compile { target c++11 } }
-
-// Copyright (C) 2013-2023 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 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even 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 COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <deque>
-
-void test01()
-{
- std::deque<int> d1;
- d1.emplace(d1.cbegin(), 1);
-}
new file mode 100644
@@ -0,0 +1,71 @@
+// { dg-do run { target c++11 } }
+
+#include <list>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ std::list<int> c;
+ std::list<int>::iterator pos;
+
+ // libstdc++/52799
+ pos = c.emplace(c.begin());
+ VERIFY( c.size() == 1 );
+ VERIFY( *pos == 0 );
+ VERIFY( pos == c.begin() );
+ pos = c.emplace(c.begin(), 2);
+ VERIFY( c.size() == 2 );
+ VERIFY( *pos == 2 );
+ VERIFY( pos == c.begin() );
+ VERIFY( *++pos == 0 );
+ pos = c.emplace(c.end(), 3);
+ VERIFY( c.size() == 3 );
+ VERIFY( *pos == 3 );
+ VERIFY( pos == --c.end() );
+ VERIFY( *--pos == 0 );
+ VERIFY( *--pos == 2 );
+
+ // const_iterator
+ pos = c.emplace(c.cbegin());
+ VERIFY( c.size() == 4 );
+ VERIFY( *pos == 0 );
+ VERIFY( pos == c.cbegin() );
+ VERIFY( *++pos == 2 );
+ std::list<int>::const_iterator i = std::next(c.cbegin(), 2);
+ pos = c.emplace(i, 22);
+ VERIFY( c.size() == 5 );
+ VERIFY( *pos == 22 );
+ VERIFY( pos == std::prev(i) );
+ VERIFY( *--pos == 2 );
+ VERIFY( *--pos == 0 );
+}
+
+struct V
+{
+ explicit V(int a, int b = 0) : val(a+b) { }
+ int val;
+};
+
+void
+test02()
+{
+ std::list<V> c;
+ std::list<V>::iterator pos;
+
+ pos = c.emplace(c.end(), 1);
+ VERIFY( c.size() == 1 );
+ VERIFY( pos->val == 1 );
+ VERIFY( pos == --c.end() );
+ pos = c.emplace(c.cend(), 2, 3);
+ VERIFY( c.size() == 2 );
+ VERIFY( pos->val == 5 );
+ VERIFY( pos == --c.cend() );
+ VERIFY( c.front().val == 1 );
+}
+
+int main()
+{
+ test01();
+ test02();
+}
deleted file mode 100644
@@ -1,27 +0,0 @@
-// { dg-do compile { target c++11 } }
-
-// Copyright (C) 2012-2023 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 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even 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 COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <list>
-
-// libstdc++/52799
-int main()
-{
- std::list<int> l;
- l.emplace(l.begin());
-}
deleted file mode 100644
@@ -1,26 +0,0 @@
-// { dg-do compile { target c++11 } }
-
-// Copyright (C) 2013-2023 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 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even 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 COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <list>
-
-void test01()
-{
- std::list<int> l1;
- l1.emplace(l1.cbegin(), 1);
-}
new file mode 100644
@@ -0,0 +1,70 @@
+// { dg-do run { target c++11 } }
+
+#include <vector>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ std::vector<int> c;
+ std::vector<int>::iterator pos;
+
+ // libstdc++/52799
+ pos = c.emplace(c.begin());
+ VERIFY( c.size() == 1 );
+ VERIFY( c[0] == 0 );
+ VERIFY( pos == c.begin() );
+ pos = c.emplace(c.begin(), 2);
+ VERIFY( c.size() == 2 );
+ VERIFY( c[0] == 2 );
+ VERIFY( c[1] == 0 );
+ VERIFY( pos == c.begin() );
+ pos = c.emplace(c.end(), 3);
+ VERIFY( c.size() == 3 );
+ VERIFY( c[0] == 2 );
+ VERIFY( c[1] == 0 );
+ VERIFY( c[2] == 3 );
+ VERIFY( pos == --c.end() );
+
+ // const_iterator
+ pos = c.emplace(c.cbegin());
+ VERIFY( c.size() == 4 );
+ VERIFY( c[0] == 0 );
+ VERIFY( c[1] == 2 );
+ VERIFY( pos == c.cbegin() );
+ pos = c.emplace(c.cbegin() + 2, 22);
+ VERIFY( c.size() == 5 );
+ VERIFY( c[0] == 0 );
+ VERIFY( c[1] == 2 );
+ VERIFY( c[2] == 22 );
+ VERIFY( pos == c.cbegin() + 2 );
+}
+
+struct V
+{
+ explicit V(int a, int b = 0) : val(a+b) { }
+ int val;
+};
+
+void
+test02()
+{
+ std::vector<V> c;
+ std::vector<V>::iterator pos;
+
+ pos = c.emplace(c.end(), 1);
+ VERIFY( c.size() == 1 );
+ VERIFY( c[0].val == 1 );
+ VERIFY( pos == --c.end() );
+ pos = c.emplace(c.cend(), 2, 3);
+ VERIFY( c.size() == 2 );
+ VERIFY( c[0].val == 1 );
+ VERIFY( c[1].val == 5 );
+ VERIFY( pos == --c.cend() );
+}
+
+int main()
+{
+ test01();
+ test02();
+}
deleted file mode 100644
@@ -1,27 +0,0 @@
-// { dg-do compile { target c++11 } }
-
-// Copyright (C) 2012-2023 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 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even 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 COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <vector>
-
-// libstdc++/52799
-int main()
-{
- std::vector<int> v;
- v.emplace(v.begin());
-}
deleted file mode 100644
@@ -1,26 +0,0 @@
-// { dg-do compile { target c++11 } }
-
-// Copyright (C) 2013-2023 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 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even 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 COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-#include <vector>
-
-void test01()
-{
- std::vector<int> v1;
- v1.emplace(v1.cbegin(), 1);
-}