URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
Compare Revisions
- This comparison shows the changes necessary to convert path
/openrisc/tags/gnu-dev/fsf-gcc-snapshot-1-mar-12/or1k-gcc/libstdc++-v3/testsuite/20_util/shared_ptr
- from Rev 742 to Rev 783
- ↔ Reverse comparison
Rev 742 → Rev 783
/dest/dest.cc
0,0 → 1,134
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
A() { ++ctor_count; } |
~A() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long A::ctor_count = 0; |
long A::dtor_count = 0; |
|
struct B : A |
{ |
B() { ++ctor_count; } |
~B() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long B::ctor_count = 0; |
long B::dtor_count = 0; |
|
struct D |
{ |
void operator()(const B* p) { delete p; ++delete_count; } |
static long delete_count; |
}; |
long D::delete_count = 0; |
|
struct reset_count_struct |
{ |
~reset_count_struct() |
{ |
A::ctor_count = 0; |
A::dtor_count = 0; |
B::ctor_count = 0; |
B::dtor_count = 0; |
D::delete_count = 0; |
} |
}; |
|
|
// 20.6.6.2.2 shared_ptr destructor [util.smartptr.shared.dest] |
|
// empty shared_ptr |
int |
test01() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
{ |
std::shared_ptr<A> a; |
} |
VERIFY( A::ctor_count == 0 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 0 ); |
VERIFY( B::dtor_count == 0 ); |
VERIFY( D::delete_count == 0 ); |
|
return 0; |
} |
|
// shared ownership |
int |
test02() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
{ |
a = std::shared_ptr<A>(new B, D()); |
} |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 1 ); |
VERIFY( B::dtor_count == 0 ); |
VERIFY( D::delete_count == 0 ); |
|
return 0; |
} |
|
// exclusive ownership |
int |
test03() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
{ |
std::shared_ptr<A> a1(new B); |
std::shared_ptr<A> a2(new B, D()); |
} |
VERIFY( A::ctor_count == 2 ); |
VERIFY( A::dtor_count == 2 ); |
VERIFY( B::ctor_count == 2 ); |
VERIFY( B::dtor_count == 2 ); |
VERIFY( D::delete_count == 1 ); |
|
return 0; |
} |
|
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
return 0; |
} |
/modifiers/reset_neg.cc
0,0 → 1,47
// { dg-do compile } |
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.6.6.2.4 shared_ptr modifiers [util.smartptr.shared.mod] |
|
// reset |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
const std::shared_ptr<A> p1(new A); |
p1.reset(); // { dg-error "discards qualifiers" } |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/modifiers/reset_alloc.cc
0,0 → 1,63
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
#include <testsuite_allocator.h> |
|
using __gnu_test::tracker_allocator_counter; |
using __gnu_test::tracker_allocator; |
|
struct A { }; |
struct B : A { }; |
struct D |
{ |
void operator()(B* p) { delete p; ++delete_count; } |
static long delete_count; |
}; |
long D::delete_count = 0; |
|
// 20.6.6.2.4 shared_ptr modifiers [util.smartptr.shared.mod] |
|
// Reset with allocator |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
tracker_allocator_counter::reset(); |
|
{ |
std::shared_ptr<A> p1; |
p1.reset(new B, D(), tracker_allocator<B>()); |
VERIFY( tracker_allocator_counter::get_allocation_count() > 0 ); |
} |
VERIFY( D::delete_count == 1 ); |
VERIFY( tracker_allocator_counter::get_allocation_count() == tracker_allocator_counter::get_deallocation_count() ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/modifiers/reset.cc
0,0 → 1,89
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
struct B : A { }; |
struct D |
{ |
void operator()(B* p) { delete p; ++delete_count; } |
static long delete_count; |
}; |
long D::delete_count = 0; |
|
// 20.6.6.2.4 shared_ptr modifiers [util.smartptr.shared.mod] |
|
// reset |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
A * const a = new A; |
std::shared_ptr<A> p1(a); |
std::shared_ptr<A> p2(p1); |
p1.reset(); |
VERIFY( p1.get() == 0 ); |
VERIFY( p2.get() == a ); |
|
return 0; |
} |
|
int |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
A * const a = new A; |
B * const b = new B; |
std::shared_ptr<A> p1(a); |
std::shared_ptr<A> p2(p1); |
p1.reset(b); |
VERIFY( p1.get() == b ); |
VERIFY( p2.get() == a ); |
|
return 0; |
} |
|
int |
test03() |
{ |
bool test __attribute__((unused)) = true; |
|
{ |
std::shared_ptr<A> p1; |
p1.reset(new B, D()); |
} |
VERIFY( D::delete_count == 1 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
return 0; |
} |
/modifiers/24805.cc
0,0 → 1,30
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
|
// 20.6.6.2.4 shared_ptr modifiers [util.smartptr.shared.mod] |
|
// swap |
|
// libstdc++/24805 |
using std::swap; |
/modifiers/swap_neg.cc
0,0 → 1,48
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.6.6.2.4 shared_ptr modifiers [util.smartptr.shared.mod] |
|
// swap |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
const std::shared_ptr<A> p1(new A); |
std::shared_ptr<A> p2(new A); |
p1.swap(p2); // { dg-error "discards qualifiers" } |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/modifiers/swap.cc
0,0 → 1,51
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.6.6.2.4 shared_ptr modifiers [util.smartptr.shared.mod] |
|
// swap |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
A * const a1 = new A; |
A * const a2 = new A; |
std::shared_ptr<A> p1(a1); |
std::shared_ptr<A> p2(a2); |
p1.swap(p2); |
VERIFY( p1.get() == a2 ); |
VERIFY( p2.get() == a1 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/cons/unique_ptr.cc
0,0 → 1,49
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.7.12.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.7.12.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Construction from unique_ptr |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::unique_ptr<A> up(new A); |
std::shared_ptr<A> sp(std::move(up)); |
VERIFY( up.get() == 0 ); |
VERIFY( sp.get() != 0 ); |
VERIFY( sp.use_count() == 1 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/cons/weak_ptr_expired.cc
0,0 → 1,58
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009, 2012 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.6.6.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Construction from expired weak_ptr |
int |
test01() |
{ |
bool test = false; |
|
std::shared_ptr<A> a1(new A); |
std::weak_ptr<A> wa(a1); |
a1.reset(); |
VERIFY( wa.expired() ); |
try |
{ |
std::shared_ptr<A> a2(wa); |
} |
catch (const std::bad_weak_ptr&) |
{ |
// Expected. |
test = true; |
} |
VERIFY( test ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/cons/alloc_min.cc
0,0 → 1,35
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2011 Free Software Foundation |
// |
// 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/>. |
|
// 20.7.2.2 Class template shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_allocator.h> |
|
struct X { }; |
|
// 20.7.2.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// test shared_ptr with minimal allocator |
|
__gnu_test::SimpleAllocator<X> alloc; |
auto deleter = [](X* p) { delete p; }; |
std::shared_ptr<X> p(new X, deleter, alloc); |
|
/cons/auto_ptr.cc
0,0 → 1,49
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.6.6.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Construction from auto_ptr |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::auto_ptr<A> a(new A); |
std::shared_ptr<A> a2(std::move(a)); |
VERIFY( a.get() == 0 ); |
VERIFY( a2.get() != 0 ); |
VERIFY( a2.use_count() == 1 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/cons/unique_ptr_deleter.cc
0,0 → 1,59
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.7.12.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
struct D { |
void operator()(A* p) const { delete p; ++count; } |
static int count; |
}; |
|
int D::count = 0; |
|
// 20.7.12.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Construction from unique_ptr |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::unique_ptr<A, D> up(new A, D()); |
{ |
std::shared_ptr<A> sp(std::move(up)); |
VERIFY( up.get() == 0 ); |
VERIFY( sp.get() != 0 ); |
VERIFY( sp.use_count() == 1 ); |
} |
VERIFY( D::count == 1 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/cons/nullptr.cc
0,0 → 1,93
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2010 Free Software Foundation |
// |
// 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/>. |
|
// 20.9.11.2 Class template shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <cstddef> |
#include <testsuite_hooks.h> |
#include <testsuite_allocator.h> |
|
// 20.9.11.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Construction from nullptr |
|
struct deleter |
{ |
int count; |
deleter() : count(0) { } |
void operator()(std::nullptr_t) { ++count; } |
void operator()(int*) const { throw "wrong type passed to deleter"; } |
}; |
|
void |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<int> p = nullptr; |
VERIFY( p.get() == nullptr ); |
VERIFY( p.use_count() == 0 ); |
|
} |
|
void |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
deleter d; |
std::shared_ptr<int> p(nullptr, std::ref(d)); |
VERIFY( p.get() == nullptr ); |
VERIFY( p.use_count() == 1 ); |
|
p = nullptr; |
VERIFY( p.use_count() == 0 ); |
VERIFY( d.count == 1 ); |
} |
|
|
void |
test03() |
{ |
bool test __attribute__((unused)) = true; |
|
deleter d; |
__gnu_test::tracker_allocator<int> a; |
std::shared_ptr<int> p(nullptr, std::ref(d), a); |
VERIFY( p.get() == nullptr ); |
VERIFY( p.use_count() == 1 ); |
|
p = nullptr; |
VERIFY( p.use_count() == 0 ); |
VERIFY( d.count == 1 ); |
|
typedef __gnu_test::tracker_allocator_counter c; |
VERIFY( c::get_destruct_count() == c::get_construct_count() ); |
VERIFY( c::get_deallocation_count() == c::get_allocation_count() ); |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
return 0; |
} |
/cons/move.cc
0,0 → 1,164
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// TR1 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <utility> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
A() { ++ctor_count; } |
virtual ~A() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long A::ctor_count = 0; |
long A::dtor_count = 0; |
|
struct B : A |
{ |
B() { ++ctor_count; } |
virtual ~B() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long B::ctor_count = 0; |
long B::dtor_count = 0; |
|
struct D |
{ |
void operator()(B* p) const { delete p; ++delete_count; } |
static long delete_count; |
}; |
long D::delete_count = 0; |
|
struct reset_count_struct |
{ |
~reset_count_struct() |
{ |
A::ctor_count = 0; |
A::dtor_count = 0; |
B::ctor_count = 0; |
B::dtor_count = 0; |
D::delete_count = 0; |
} |
}; |
|
// 20.6.6.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Rvalue construction |
int test01() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a1; |
std::shared_ptr<A> a2(std::move(a1)); |
VERIFY( a1.use_count() == 0 ); |
VERIFY( a2.use_count() == 0 ); |
VERIFY( A::ctor_count == 0 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 0 ); |
VERIFY( B::dtor_count == 0 ); |
|
return 0; |
} |
|
int |
test02() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a1(new A); |
std::shared_ptr<A> a2(std::move(a1)); |
VERIFY( a1.use_count() == 0 ); |
VERIFY( a2.use_count() == 1 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
|
return 0; |
} |
|
int |
test03() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<B> b(new B); |
std::shared_ptr<A> a(std::move(b)); |
VERIFY( b.use_count() == 0 ); |
VERIFY( a.use_count() == 1 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 1 ); |
VERIFY( B::dtor_count == 0 ); |
|
return 0; |
} |
|
int |
test04() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<B> b(new B, D()); |
std::shared_ptr<A> a(std::move(b)); |
VERIFY( b.use_count() == 0 ); |
VERIFY( a.use_count() == 1 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 1 ); |
VERIFY( B::dtor_count == 0 ); |
|
a = std::move(std::shared_ptr<A>()); |
VERIFY( D::delete_count == 1 ); |
VERIFY( B::dtor_count == 1 ); |
|
return 0; |
} |
|
int |
test05() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a(std::move(std::shared_ptr<A>(new A))); |
VERIFY( a.use_count() == 1 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
test04(); |
test05(); |
return 0; |
} |
/cons/43820_neg.cc
0,0 → 1,40
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2010, 2011, 2012 Free Software Foundation |
// |
// 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/>. |
|
// 20.9.11.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
|
// incomplete type |
struct X; |
|
// get an auto_ptr rvalue |
std::auto_ptr<X>&& ap(); |
|
void test01() |
{ |
X* px = 0; |
std::shared_ptr<X> p1(px); // { dg-error "here" } |
// { dg-error "incomplete" "" { target *-*-* } 771 } |
|
std::shared_ptr<X> p9(ap()); // { dg-error "here" } |
// { dg-error "incomplete" "" { target *-*-* } 865 } |
|
} |
/cons/copy.cc
0,0 → 1,136
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
A() { ++ctor_count; } |
virtual ~A() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long A::ctor_count = 0; |
long A::dtor_count = 0; |
|
struct B : A |
{ |
B() { ++ctor_count; } |
virtual ~B() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long B::ctor_count = 0; |
long B::dtor_count = 0; |
|
void deleter(A* p) { delete p; } |
|
struct reset_count_struct |
{ |
~reset_count_struct() |
{ |
A::ctor_count = 0; |
A::dtor_count = 0; |
B::ctor_count = 0; |
B::dtor_count = 0; |
} |
}; |
|
// 20.6.6.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Copy construction |
int test01() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a1; |
std::shared_ptr<A> a2(a1); |
VERIFY( a2.use_count() == 0 ); |
VERIFY( A::ctor_count == 0 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 0 ); |
VERIFY( B::dtor_count == 0 ); |
|
return 0; |
} |
|
int |
test02() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a1(new A); |
std::shared_ptr<A> a2(a1); |
VERIFY( a2.use_count() == 2 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 0 ); |
VERIFY( B::dtor_count == 0 ); |
|
return 0; |
} |
|
int |
test03() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<B> b(new B); |
std::shared_ptr<A> a(b); |
VERIFY( a.use_count() == 2 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 1 ); |
VERIFY( B::dtor_count == 0 ); |
|
return 0; |
} |
|
int |
test04() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<B> b(new B, &deleter); |
std::shared_ptr<A> a(b); |
VERIFY( a.use_count() == 2 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 1 ); |
VERIFY( B::dtor_count == 0 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
test04(); |
return 0; |
} |
/cons/unique_ptr_deleter_ref_1.cc
0,0 → 1,60
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.7.12.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
struct D { |
typedef void result_type; |
void operator()(A* p) { delete p; ++count; } |
int count; |
}; |
|
|
// 20.7.12.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Construction from unique_ptr |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
D d = D(); |
std::unique_ptr<A, D&> up(new A, d); |
{ |
std::shared_ptr<A> sp(std::move(up)); |
VERIFY( up.get() == 0 ); |
VERIFY( sp.get() != 0 ); |
VERIFY( sp.use_count() == 1 ); |
} |
VERIFY( d.count == 1 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/cons/weak_ptr.cc
0,0 → 1,51
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.6.6.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Construction from weak_ptr |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
A * const a = new A; |
std::shared_ptr<A> a1(a); |
std::weak_ptr<A> wa(a1); |
std::shared_ptr<A> a2(wa); |
VERIFY( a2.get() == a ); |
VERIFY( a2.use_count() == wa.use_count() ); |
|
return 0; |
} |
|
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/cons/unique_ptr_deleter_ref_2.cc
0,0 → 1,63
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.7.12.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <functional> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
struct D { |
typedef void result_type; |
void operator()(A* p) { delete p; ++count; } |
int count; |
}; |
|
|
// 20.7.12.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Construction from unique_ptr |
// See: http://gcc.gnu.org/ml/libstdc++/2008-09/msg00070.html. |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
D d; |
std::unique_ptr<A, D&> p1(new A, d); |
|
std::shared_ptr<A> p2(std::move(p1)); |
|
typedef std::reference_wrapper<D> D2; |
D2* p3 = std::get_deleter<D2>(p2); |
|
VERIFY( p3 != 0 ); |
VERIFY( &p3->get() == &d ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/cons/noexcept_move_construct.cc
0,0 → 1,27
// { dg-do compile } |
// { dg-options "-std=gnu++0x" } |
|
// 2011-06-14 Paolo Carlini <paolo.carlini@oracle.com> |
// |
// Copyright (C) 2011 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 <memory> |
|
typedef std::shared_ptr<int> sptype; |
|
static_assert(std::is_nothrow_move_constructible<sptype>::value, "Error"); |
/cons/pointer.cc
0,0 → 1,80
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
struct B : A { }; |
|
|
// 20.6.6.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Construction from pointer |
|
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
A * const a = 0; |
std::shared_ptr<A> p(a); |
VERIFY( p.get() == 0 ); |
VERIFY( p.use_count() == 1 ); |
|
return 0; |
} |
|
int |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
A * const a = new A; |
std::shared_ptr<A> p(a); |
VERIFY( p.get() == a ); |
VERIFY( p.use_count() == 1 ); |
|
return 0; |
} |
|
|
int |
test03() |
{ |
bool test __attribute__((unused)) = true; |
|
B * const b = new B; |
std::shared_ptr<A> p(b); |
VERIFY( p.get() == b ); |
VERIFY( p.use_count() == 1 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
return 0; |
} |
/cons/46910.cc
0,0 → 1,46
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2010 Free Software Foundation |
// |
// 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/>. |
|
// 20.9.10.2 Class template shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
// 20.9.10.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
struct deleter; |
|
class A |
{ |
~A() = default; |
friend struct deleter; |
}; |
|
struct deleter |
{ |
void operator()(A* a) const; |
}; |
|
void |
test01() |
{ |
std::shared_ptr<A> p(new A, deleter()); |
} |
|
/cons/default.cc
0,0 → 1,46
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.6.6.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Default construction |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
VERIFY( a.get() == 0 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/cons/unique_ptr_neg.cc
0,0 → 1,48
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2008, 2009, 2010 Free Software Foundation |
// |
// 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/>. |
|
// 20.7.12.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.7.12.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Construction from lvalue unique_ptr |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::unique_ptr<A> a; |
std::shared_ptr<A> p(a); // { dg-error "cannot bind" } |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
// { dg-prune-output "initializing argument" } |
/cons/39405.cc
0,0 → 1,30
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2009 Free Software Foundation |
// |
// 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 <memory> |
|
// libstdc++/39405 |
template<typename T> |
struct foo |
{ |
std::shared_ptr<foo<T> > m_foo; |
}; |
|
std::shared_ptr<foo<int> > t; |
/cons/constexpr.cc
0,0 → 1,35
// { dg-do compile } |
// { dg-options "-std=gnu++0x -fno-inline -save-temps -g0" } |
// { dg-final { scan-assembler-not "_ZNSt10shared_ptrIiEC2Ev" } } |
// { dg-final { scan-assembler-not "_ZNSt10shared_ptrIiEC2EDn" } } |
|
// Copyright (C) 2010 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 <memory> |
#include <testsuite_common_types.h> |
|
int main() |
{ |
__gnu_test::constexpr_default_constructible test1; //not literal |
test1.operator()<std::shared_ptr<int>>(); |
|
__gnu_test::constexpr_single_value_constructible test2; //not literal |
test2.operator()<std::shared_ptr<int>, std::nullptr_t>(); |
|
return 0; |
} |
/cons/auto_ptr_neg.cc
0,0 → 1,35
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
|
struct A { }; |
|
// 20.6.6.2.3 shared_ptr assignment [util.smartptr.shared.const] |
|
// Construction from const auto_ptr |
void |
test01() |
{ |
const std::auto_ptr<A> a; |
std::shared_ptr<A> p(std::move(a)); // { dg-error "no match" } |
} |
/cons/alias.cc
0,0 → 1,107
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
A() : i() { } |
virtual ~A() { } |
int i; |
}; |
|
struct B : A |
{ |
B() : A(), a() { } |
virtual ~B() { } |
A a; |
}; |
|
void deletefunc(A* p) { delete p; } |
|
// 20.6.6.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Aliasing constructors |
|
int test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
std::shared_ptr<bool> b1(a, &test); |
VERIFY( b1.use_count() == 0 ); |
VERIFY( a.get() == 0 ); |
VERIFY( b1.get() == &test ); |
|
std::shared_ptr<bool> b2(b1); |
VERIFY( b2.use_count() == 0 ); |
VERIFY( b1.get() == b2.get() ); |
|
return 0; |
} |
|
int |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a(new A); |
std::shared_ptr<int> i1(a, &a->i); |
VERIFY( i1.use_count() == 2 ); |
|
std::shared_ptr<int> i2(i1); |
VERIFY( i2.use_count() == 3 ); |
VERIFY( i2.get() == &a->i ); |
|
return 0; |
} |
|
int |
test03() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<B> b(new B); |
std::shared_ptr<A> a1(b, b.get()); |
std::shared_ptr<A> a2(b, &b->a); |
VERIFY( a2.use_count() == 3 ); |
VERIFY( a1 == b ); |
VERIFY( a2 != b ); |
VERIFY( a1.get() != a2.get() ); |
|
std::shared_ptr<A> a3(a1); |
VERIFY( a3 == b ); |
|
a3 = a2; |
VERIFY( a3.get() == &b->a ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
return 0; |
} |
/cons/alloc.cc
0,0 → 1,103
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
#include <testsuite_allocator.h> |
|
using __gnu_test::tracker_allocator_counter; |
using __gnu_test::tracker_allocator; |
|
struct A { }; |
void deletefunc(A* p) { delete p; } |
struct D |
{ |
void operator()(A* p) { delete p; ++delete_count; } |
static long delete_count; |
}; |
long D::delete_count = 0; |
|
// 20.6.6.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Construction with allocator |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
tracker_allocator_counter::reset(); |
|
std::shared_ptr<A> p1(new A, deletefunc, tracker_allocator<A>()); |
std::size_t const sz = tracker_allocator_counter::get_allocation_count(); |
VERIFY( sz > 0 ); |
{ |
std::shared_ptr<A> p2(p1); |
VERIFY( p2.use_count() == 2 ); |
VERIFY( tracker_allocator_counter::get_allocation_count() == sz ); |
VERIFY( tracker_allocator_counter::get_deallocation_count() == 0 ); |
} |
VERIFY( p1.use_count() == 1 ); |
VERIFY( tracker_allocator_counter::get_allocation_count() == sz ); |
VERIFY( tracker_allocator_counter::get_deallocation_count() == 0 ); |
p1.reset(); |
VERIFY( p1.use_count() == 0 ); |
VERIFY( tracker_allocator_counter::get_allocation_count() == sz ); |
VERIFY( tracker_allocator_counter::get_deallocation_count() == sz ); |
|
return 0; |
} |
|
// Construction with allocator |
int |
test02() |
{ |
bool test __attribute__((unused)) = true; |
tracker_allocator_counter::reset(); |
|
std::shared_ptr<A> p1(new A, deletefunc, tracker_allocator<A>()); |
std::size_t const sz1 = tracker_allocator_counter::get_allocation_count(); |
VERIFY( sz1 > 0 ); |
std::shared_ptr<A> p2(new A, D(), tracker_allocator<A>()); |
std::size_t const sz2 = tracker_allocator_counter::get_allocation_count(); |
VERIFY( sz2 > sz1 ); |
VERIFY( tracker_allocator_counter::get_deallocation_count() == 0 ); |
p1 = p2; |
VERIFY( p2.use_count() == 2 ); |
VERIFY( tracker_allocator_counter::get_allocation_count() == sz2 ); |
VERIFY( tracker_allocator_counter::get_deallocation_count() == sz1 ); |
p1.reset(); |
VERIFY( p2.use_count() == 1 ); |
VERIFY( tracker_allocator_counter::get_allocation_count() == sz2 ); |
VERIFY( tracker_allocator_counter::get_deallocation_count() == sz1 ); |
p2.reset(); |
VERIFY( tracker_allocator_counter::get_allocation_count() == sz2 ); |
VERIFY( tracker_allocator_counter::get_deallocation_count() == sz2 ); |
VERIFY( D::delete_count == 1 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
return 0; |
} |
/hash/1.cc
0,0 → 1,48
// { dg-options "-std=gnu++0x" } |
|
// 2010-06-11 Paolo Carlini <paolo.carlini@oracle.com> |
|
// Copyright (C) 2010 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 <memory> |
#include <testsuite_hooks.h> |
|
void test01() |
{ |
bool test __attribute__((unused)) = true; |
|
struct T { }; |
|
std::shared_ptr<T> s0(new T); |
std::hash<std::shared_ptr<T>> hs0; |
std::hash<T*> hp0; |
|
VERIFY( hs0(s0) == hp0(s0.get()) ); |
|
std::__shared_ptr<T> s1(new T); |
std::hash<std::__shared_ptr<T>> hs1; |
std::hash<T*> hp1; |
|
VERIFY( hs1(s1) == hp1(s1.get()) ); |
} |
|
int main() |
{ |
test01(); |
return 0; |
} |
/requirements/explicit_instantiation/1.cc
0,0 → 1,31
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_tr1.h> |
|
using namespace __gnu_test; |
using std::shared_ptr; |
template class shared_ptr<int>; |
template class shared_ptr<void>; |
template class shared_ptr<ClassType>; |
template class shared_ptr<IncompleteClass>; |
/requirements/explicit_instantiation/2.cc
0,0 → 1,34
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_tr1.h> |
|
// Check the _S_single lock policy can be instantiated. For a thread-enabled |
// library this checks the templates can be instantiated for non-default |
// lock policy, for a single-threaded lib this is redundant but harmless. |
using namespace __gnu_test; |
using std::__shared_ptr; |
using std::_S_single; |
template class __shared_ptr<int, _S_single>; |
template class __shared_ptr<ClassType, _S_single>; |
template class __shared_ptr<IncompleteClass, _S_single>; |
/assign/auto_ptr_rvalue.cc
0,0 → 1,61
// { dg-options "-std=gnu++0x -Wno-deprecated" } |
// { dg-do compile } |
|
// Copyright (C) 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.7.12.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
std::auto_ptr<A> source() { return std::auto_ptr<A>(); } |
|
// 20.7.12.2.3 shared_ptr assignment [util.smartptr.shared.assign] |
|
// Assignment from rvalue auto_ptr |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
a = source(); |
|
return 0; |
} |
|
int |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
std::auto_ptr<A> au; |
a = std::move(au); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
return 0; |
} |
/assign/shared_ptr.cc
0,0 → 1,96
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
A() { ++ctor_count; } |
virtual ~A() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long A::ctor_count = 0; |
long A::dtor_count = 0; |
|
struct B : A |
{ |
B() { ++ctor_count; } |
virtual ~B() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long B::ctor_count = 0; |
long B::dtor_count = 0; |
|
|
struct reset_count_struct |
{ |
~reset_count_struct() |
{ |
A::ctor_count = 0; |
A::dtor_count = 0; |
B::ctor_count = 0; |
B::dtor_count = 0; |
} |
}; |
|
|
// 20.6.6.2.3 shared_ptr assignment [util.smartptr.shared.assign] |
|
// Assignment from shared_ptr<Y> |
void |
test01() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
|
a = std::shared_ptr<A>(); |
VERIFY( a.get() == 0 ); |
VERIFY( A::ctor_count == 0 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 0 ); |
VERIFY( B::dtor_count == 0 ); |
|
a = std::shared_ptr<A>(new A); |
VERIFY( a.get() != 0 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 0 ); |
VERIFY( B::dtor_count == 0 ); |
|
a = std::shared_ptr<B>(new B); |
VERIFY( a.get() != 0 ); |
VERIFY( A::ctor_count == 2 ); |
VERIFY( A::dtor_count == 1 ); |
VERIFY( B::ctor_count == 1 ); |
VERIFY( B::dtor_count == 0 ); |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/assign/unique_ptr_lvalue_neg.cc
0,0 → 1,49
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2008, 2009, 2010 Free Software Foundation |
// |
// 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/>. |
|
// 20.7.12.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.7.12.2.3 shared_ptr assignment [util.smartptr.shared.assign] |
|
// Assignment from lvalue unique_ptr |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
std::unique_ptr<A> u; |
a = u; // { dg-error "cannot bind" } |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
// { dg-prune-output "initializing argument" } |
/assign/auto_ptr.cc
0,0 → 1,85
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
A() { ++ctor_count; } |
virtual ~A() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long A::ctor_count = 0; |
long A::dtor_count = 0; |
|
struct B : A |
{ |
B() { ++ctor_count; } |
virtual ~B() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long B::ctor_count = 0; |
long B::dtor_count = 0; |
|
|
struct reset_count_struct |
{ |
~reset_count_struct() |
{ |
A::ctor_count = 0; |
A::dtor_count = 0; |
B::ctor_count = 0; |
B::dtor_count = 0; |
} |
}; |
|
|
// 20.6.6.2.3 shared_ptr assignment [util.smartptr.shared.assign] |
|
// Assignment from auto_ptr<Y> |
int |
test01() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a(new A); |
std::auto_ptr<B> b(new B); |
a = std::move(b); |
VERIFY( a.get() != 0 ); |
VERIFY( b.get() == 0 ); |
VERIFY( A::ctor_count == 2 ); |
VERIFY( A::dtor_count == 1 ); |
VERIFY( B::ctor_count == 1 ); |
VERIFY( B::dtor_count == 0 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/assign/dr541.cc
0,0 → 1,30
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
|
// DR 541. shared_ptr template assignment and void |
void test01() |
{ |
std::shared_ptr<void> p; |
p.operator=<void>(p); |
} |
/assign/shared_ptr_neg.cc
0,0 → 1,52
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
struct B { }; |
|
// 20.6.6.2.3 shared_ptr assignment [util.smartptr.shared.assign] |
|
// Assignment from incompatible shared_ptr<Y> |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
std::shared_ptr<B> b; |
a = b; // { dg-error "here" } |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
// { dg-error "In instantiation" "" { target *-*-* } 0 } |
// { dg-error "cannot convert" "" { target *-*-* } 0 } |
// { dg-error "required from" "" { target *-*-* } 0 } |
/assign/assign.cc
0,0 → 1,72
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
A() { ++ctor_count; } |
virtual ~A() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long A::ctor_count = 0; |
long A::dtor_count = 0; |
|
struct reset_count_struct |
{ |
~reset_count_struct() |
{ |
A::ctor_count = 0; |
A::dtor_count = 0; |
} |
}; |
|
|
// 20.6.6.2.3 shared_ptr assignment [util.smartptr.shared.assign] |
|
// Assignment from shared_ptr<Y> |
void |
test01() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
|
a = std::shared_ptr<A>(new A); |
VERIFY( a.get() != 0 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
|
a = std::shared_ptr<A>(); |
VERIFY( a.get() == 0 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 1 ); |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/assign/auto_ptr_neg.cc
0,0 → 1,51
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
struct B { }; |
|
// 20.6.6.2.3 shared_ptr assignment [util.smartptr.shared.assign] |
|
// Assignment from incompatible auto_ptr<Y> |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
std::auto_ptr<B> b; |
a = std::move(b); // { dg-error "here" } |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
|
// { dg-prune-output "cannot convert" } |
/assign/move.cc
0,0 → 1,118
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <utility> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
A() { ++ctor_count; } |
virtual ~A() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long A::ctor_count = 0; |
long A::dtor_count = 0; |
|
struct B : A |
{ |
B() { ++ctor_count; } |
virtual ~B() { ++dtor_count; } |
static long ctor_count; |
static long dtor_count; |
}; |
long B::ctor_count = 0; |
long B::dtor_count = 0; |
|
struct reset_count_struct |
{ |
~reset_count_struct() |
{ |
A::ctor_count = 0; |
A::dtor_count = 0; |
B::ctor_count = 0; |
B::dtor_count = 0; |
} |
}; |
|
|
// 20.6.6.2.1 shared_ptr constructors [util.smartptr.shared.const] |
|
// Rvalue assignment from shared_ptr |
void |
test01() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a1; |
std::shared_ptr<A> a2(new A); |
|
a1 = std::move(a2); |
VERIFY( a1.get() != 0 ); |
VERIFY( a2.get() == 0 ); |
VERIFY( a1.use_count() == 1 ); |
VERIFY( a2.use_count() == 0 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
|
a1 = std::move(std::shared_ptr<A>()); |
VERIFY( a1.get() == 0 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 1 ); |
} |
|
// Rvalue assignment from shared_ptr<Y> |
void |
test02() |
{ |
reset_count_struct __attribute__((unused)) reset; |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
std::shared_ptr<B> b(new B); |
|
a = std::move(b); |
VERIFY( a.get() != 0 ); |
VERIFY( b.get() == 0 ); |
VERIFY( a.use_count() == 1 ); |
VERIFY( b.use_count() == 0 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 0 ); |
VERIFY( B::ctor_count == 1 ); |
VERIFY( B::dtor_count == 0 ); |
|
a = std::move(std::shared_ptr<A>()); |
VERIFY( a.get() == 0 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( A::dtor_count == 1 ); |
VERIFY( B::ctor_count == 1 ); |
VERIFY( B::dtor_count == 1 ); |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
return 0; |
} |
/assign/unique_ptr_rvalue.cc
0,0 → 1,61
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.7.12.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
std::unique_ptr<A> source() { return std::unique_ptr<A>(); } |
|
// 20.7.12.2.3 shared_ptr assignment [util.smartptr.shared.assign] |
|
// Assignment from rvalue unique_ptr |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
a = source(); |
|
return 0; |
} |
|
int |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a; |
std::unique_ptr<A> u; |
a = std::move(u); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
return 0; |
} |
/creation/dr402.cc
0,0 → 1,48
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2007, 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <new> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
void* operator new(size_t n) { return new char[sizeof(A)]; } |
void operator delete(void* p, size_t) { delete (char*)p; } |
}; |
|
// 20.6.6.2.6 shared_ptr creation [util.smartptr.shared.create] |
|
void |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> p = std::make_shared<A>(); |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/creation/make.cc
0,0 → 1,97
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2007, 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
A(int i, double d, char c = '\0') : i(i), d(d), c(c) { ++ctor_count; } |
explicit A(int i) : i(i), d(), c() { ++ctor_count; } |
A() : i(), d(), c() { ++ctor_count; } |
~A() { ++dtor_count; } |
int i; |
double d; |
char c; |
static int ctor_count; |
static int dtor_count; |
}; |
int A::ctor_count = 0; |
int A::dtor_count = 0; |
|
struct reset_count_struct |
{ |
~reset_count_struct() |
{ |
A::ctor_count = 0; |
A::dtor_count = 0; |
} |
}; |
|
// 20.6.6.2.6 shared_ptr creation [util.smartptr.shared.create] |
|
void |
test01() |
{ |
bool test __attribute__((unused)) = true; |
reset_count_struct __attribute__((unused)) reset; |
|
{ |
std::shared_ptr<A> p1 = std::make_shared<A>(); |
VERIFY( p1.get() != 0 ); |
VERIFY( p1.use_count() == 1 ); |
VERIFY( A::ctor_count == 1 ); |
} |
VERIFY( A::ctor_count == A::dtor_count ); |
} |
|
void |
test02() |
{ |
bool test __attribute__((unused)) = true; |
reset_count_struct __attribute__((unused)) reset; |
|
std::shared_ptr<A> p1; |
|
p1 = std::make_shared<A>(1); |
VERIFY( A::ctor_count == 1 ); |
|
p1 = std::make_shared<A>(1, 2.0); |
VERIFY( A::ctor_count == 2 ); |
VERIFY( A::dtor_count == 1 ); |
|
p1 = std::make_shared<A>(1, 2.0, '3'); |
VERIFY( A::ctor_count == 3 ); |
VERIFY( A::dtor_count == 2 ); |
VERIFY( p1->i == 1 ); |
VERIFY( p1->d == 2.0 ); |
VERIFY( p1->c == '3' ); |
|
p1 = std::shared_ptr<A>(); |
VERIFY( A::ctor_count == A::dtor_count ); |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
} |
/creation/alloc_min.cc
0,0 → 1,34
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2011 Free Software Foundation |
// |
// 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/>. |
|
// 20.7.2.2 Class template shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_allocator.h> |
|
struct X { }; |
|
// 20.7.2.2.6 shared_ptr creation [util.smartptr.shared.create] |
|
// test shared_ptr with minimal allocator |
|
__gnu_test::SimpleAllocator<X> alloc; |
auto p = std::allocate_shared<X>(alloc); |
|
/creation/36949.cc
0,0 → 1,34
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2008, 2009 Free Software Foundation |
// |
// 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 <memory> |
|
struct A : std::enable_shared_from_this<A> { }; |
|
// libstdc++/36949 |
void test01() |
{ |
std::make_shared<A>()->shared_from_this(); |
} |
|
int main() |
{ |
test01(); |
return 0; |
} |
/creation/dr925.cc
0,0 → 1,90
// { dg-options "-std=gnu++0x -Wno-deprecated" } |
|
// Copyright (C) 2010 Free Software Foundation |
// |
// 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/>. |
|
// 20.9.11.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
}; |
|
std::unique_ptr<A> |
create_unique_ptr() |
{ |
return std::unique_ptr<A>(new A()); |
} |
|
std::auto_ptr<A> |
create_auto_ptr() |
{ |
return std::auto_ptr<A>(new A()); |
} |
|
void |
process(std::shared_ptr<A> a) |
{ |
bool test __attribute__((unused)) = true; |
|
VERIFY( a.get() != 0 ); |
VERIFY( a.use_count() == 1 ); |
} |
|
// 20.9.11.2.1 shared_ptr creation [util.smartptr.shared.const] |
|
// Implicit conversion of auto_ptr to shared_ptr is allowed |
|
void |
test01() |
{ |
process(create_auto_ptr()); |
} |
|
void |
test02() |
{ |
std::auto_ptr<A> a = create_auto_ptr(); |
process(std::move(a)); |
} |
|
// Implicit conversion of unique_ptr to shared_ptr is allowed |
|
void |
test03() |
{ |
process(create_unique_ptr()); |
} |
|
void |
test04() |
{ |
std::unique_ptr<A> a = create_unique_ptr(); |
process(std::move(a)); |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
test04(); |
return 0; |
} |
/creation/private.cc
0,0 → 1,52
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2011 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 <memory> |
#include <new> |
|
// The behaviour tested here relies on the resolution of LWG issue 2070 |
|
template<typename T> struct MyAlloc; |
|
class Private |
{ |
Private() = default; |
Private(const Private&) = default; |
~Private() = default; |
|
friend class MyAlloc<Private>; |
|
public: |
int get() const { return 0; } |
}; |
|
template<typename T> |
struct MyAlloc : std::allocator<Private> |
{ |
void construct(T* p) { ::new((void*)p) T(); } |
void destroy(T* p) { p->~T(); } |
}; |
|
int main() |
{ |
MyAlloc<Private> a; |
auto p = std::allocate_shared<Private>(a); |
return p->get(); |
} |
|
/creation/alloc.cc
0,0 → 1,110
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2007, 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
#include <testsuite_allocator.h> |
|
using __gnu_test::tracker_allocator_counter; |
using __gnu_test::tracker_allocator; |
|
struct A |
{ |
A(int i, double d, char c = '\0') : i(i), d(d), c(c) { ++ctor_count; } |
explicit A(int i) : i(i), d(), c() { ++ctor_count; } |
A() : i(), d(), c() { ++ctor_count; } |
~A() { ++dtor_count; } |
int i; |
double d; |
char c; |
static int ctor_count; |
static int dtor_count; |
}; |
int A::ctor_count = 0; |
int A::dtor_count = 0; |
|
struct reset_count_struct |
{ |
~reset_count_struct() |
{ |
A::ctor_count = 0; |
A::dtor_count = 0; |
tracker_allocator_counter::reset(); |
} |
}; |
|
// 20.6.6.2.6 shared_ptr creation [util.smartptr.shared.create] |
|
void |
test01() |
{ |
bool test __attribute__((unused)) = true; |
reset_count_struct __attribute__((unused)) reset; |
|
{ |
std::shared_ptr<A> p1 = std::allocate_shared<A>(tracker_allocator<A>()); |
VERIFY( p1.get() != 0 ); |
VERIFY( p1.use_count() == 1 ); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( tracker_allocator_counter::get_allocation_count() > 0 ); |
} |
VERIFY( A::ctor_count == A::dtor_count ); |
VERIFY( tracker_allocator_counter::get_allocation_count() |
== tracker_allocator_counter::get_deallocation_count() ); |
} |
|
void |
test02() |
{ |
bool test __attribute__((unused)) = true; |
reset_count_struct __attribute__((unused)) reset; |
|
std::shared_ptr<A> p1; |
|
p1 = std::allocate_shared<A>(tracker_allocator<A>(), 1); |
VERIFY( A::ctor_count == 1 ); |
VERIFY( tracker_allocator_counter::get_allocation_count() > 0 ); |
|
p1 = std::allocate_shared<A>(tracker_allocator<A>(), 1, 2.0); |
VERIFY( A::ctor_count == 2 ); |
VERIFY( A::dtor_count == 1 ); |
VERIFY( tracker_allocator_counter::get_deallocation_count() > 0 ); |
|
p1 = std::allocate_shared<A>(tracker_allocator<A>(), 1, 2.0, '3'); |
VERIFY( A::ctor_count == 3 ); |
VERIFY( A::dtor_count == 2 ); |
VERIFY( p1->i == 1 ); |
VERIFY( p1->d == 2.0 ); |
VERIFY( p1->c == '3' ); |
|
p1 = std::shared_ptr<A>(); |
VERIFY( A::ctor_count == A::dtor_count ); |
VERIFY( tracker_allocator_counter::get_allocation_count() |
== tracker_allocator_counter::get_deallocation_count() ); |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
return 0; |
} |
/thread/mutex_weaktoshared.cc
0,0 → 1,199
// Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } } |
// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } } |
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } } |
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } } |
|
#include <memory> |
#include <random> |
#include <vector> |
#include <testsuite_hooks.h> |
#include <iostream> |
#include <cstdlib> |
|
#include <pthread.h> |
|
#ifdef _GLIBCXX_HAVE_UNISTD_H |
#include <unistd.h> // To test for _POSIX_THREAD_PRIORITY_SCHEDULING |
#endif |
|
/* This (brute-force) tests the atomicity and thus thread safety of the |
* shared_ptr <- weak_ptr |
* assignment operation by allocating a test object, retrieving a weak |
* reference to it, and letting a number of threads repeatedly create strong |
* references from the weak reference. |
* Specifically, this tests the function _Sp_counted_base<true>::add_ref_lock() |
*/ |
|
|
const unsigned int HAMMER_MAX_THREADS = 10; |
const unsigned int POOL_SIZE = 1000; |
const unsigned long HAMMER_REPEAT = 100000; |
const unsigned long KILL_ONE_IN = 1000; |
|
struct A |
{ |
static _Atomic_word counter; |
A() |
{ |
__gnu_cxx::__atomic_add(&counter, 1); |
} |
~A() |
{ |
__gnu_cxx::__atomic_add(&counter, -1); |
} |
}; |
|
_Atomic_word A::counter = 0; |
|
using std::_S_mutex; |
|
typedef std::__shared_ptr<A, _S_mutex> sp_A_t; |
typedef std::__weak_ptr<A, _S_mutex> wp_A_t; |
|
typedef std::vector<sp_A_t> sp_vector_t; |
typedef std::vector<wp_A_t> wp_vector_t; |
|
struct shared_and_weak_pools |
{ |
sp_vector_t& shared_pool; |
wp_vector_t& weak_pool; |
|
shared_and_weak_pools(sp_vector_t& _shared_pool, wp_vector_t& _weak_pool) |
: shared_pool(_shared_pool), weak_pool(_weak_pool) |
{ } |
}; |
|
void* thread_hammer_and_kill(void* opaque_pools) |
{ |
shared_and_weak_pools& pools = *static_cast<shared_and_weak_pools*>(opaque_pools); |
// Using the same parameters as in the RNG test cases. |
std::mersenne_twister_engine< |
unsigned long, 32, 624, 397, 31, |
0x9908b0dful, 11, |
0xfffffffful, 7, |
0x9d2c5680ul, 15, |
0xefc60000ul, 18, 1812433253ul> rng; |
|
sp_vector_t::iterator cur_shared = pools.shared_pool.begin(); |
wp_vector_t::iterator cur_weak = pools.weak_pool.begin(); |
|
for (unsigned int i = 0; i < HAMMER_REPEAT; ++i) |
{ |
try |
{ |
sp_A_t strong(*cur_weak); |
} |
catch (std::bad_weak_ptr& exception) |
{ |
++cur_weak; |
if (cur_weak == pools.weak_pool.end()) |
break; |
} |
|
if (rng() % KILL_ONE_IN == 0) |
{ |
cur_shared->reset(); |
++cur_shared; |
} |
} |
return 0; |
} |
|
void* thread_hammer(void* opaque_weak) |
{ |
wp_vector_t& weak_pool = *static_cast<wp_vector_t*>(opaque_weak); |
// Using the same parameters as in the RNG test cases. |
std::mersenne_twister_engine< |
unsigned long, 32, 624, 397, 31, |
0x9908b0dful, 11, |
0xfffffffful, 7, |
0x9d2c5680ul, 15, |
0xefc60000ul, 18, 1812433253ul> rng; |
|
wp_vector_t::iterator cur_weak = weak_pool.begin(); |
|
for (unsigned int i = 0; i < HAMMER_REPEAT; ++i) |
{ |
try |
{ |
sp_A_t strong(*cur_weak); |
} |
catch (std::bad_weak_ptr& exception) |
{ |
++cur_weak; |
if (cur_weak == weak_pool.end()) |
break; |
} |
} |
return 0; |
} |
|
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
sp_vector_t obj_pool(POOL_SIZE); |
|
for(sp_vector_t::iterator cur = obj_pool.begin(); cur != obj_pool.end(); ++cur) |
{ |
cur->reset(new A); |
} |
// Obtain weak references. |
std::vector<wp_vector_t> weak_pool(HAMMER_MAX_THREADS, wp_vector_t(obj_pool.begin(), obj_pool.end())); |
|
// Launch threads with pointer to weak reference. |
pthread_t threads[HAMMER_MAX_THREADS]; |
#if defined(__sun) && defined(__svr4__) && _XOPEN_VERSION >= 500 |
pthread_setconcurrency (HAMMER_MAX_THREADS); |
#endif |
|
pthread_attr_t tattr; |
pthread_attr_init(&tattr); |
|
shared_and_weak_pools pools(obj_pool, weak_pool[0]); |
pthread_create(threads, &tattr, thread_hammer_and_kill, static_cast<void*>(&pools)); |
for (unsigned int worker = 1; worker < HAMMER_MAX_THREADS; worker++) |
{ |
if (pthread_create(&threads[worker], &tattr, |
thread_hammer, static_cast<void*>(&weak_pool[worker]))) |
std::abort(); |
} |
// Wait for threads to complete, then check integrity of reference. |
void* status; |
for (unsigned int worker = 0; worker < HAMMER_MAX_THREADS; worker++) |
{ |
if (pthread_join(threads[worker], &status)) |
std::abort(); |
} |
obj_pool.clear(); |
|
VERIFY( A::counter == 0 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/thread/default_weaktoshared.cc
0,0 → 1,197
// Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } } |
// { dg-options "-pthread -std=gnu++0x" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } } |
// { dg-options "-pthreads -std=gnu++0x" { target *-*-solaris* } } |
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } } |
|
#include <memory> |
#include <random> |
#include <vector> |
#include <testsuite_hooks.h> |
#include <iostream> |
#include <cstdlib> |
|
#include <pthread.h> |
|
#ifdef _GLIBCXX_HAVE_UNISTD_H |
#include <unistd.h> // To test for _POSIX_THREAD_PRIORITY_SCHEDULING |
#endif |
|
/* This (brute-force) tests the atomicity and thus thread safety of the |
* shared_ptr <- weak_ptr |
* assignment operation by allocating a test object, retrieving a weak |
* reference to it, and letting a number of threads repeatedly create strong |
* references from the weak reference. |
* Specifically, this tests the function _Sp_counted_base<true>::add_ref_lock() |
*/ |
|
|
const unsigned int HAMMER_MAX_THREADS = 10; |
const unsigned int POOL_SIZE = 1000; |
const unsigned long HAMMER_REPEAT = 100000; |
const unsigned long KILL_ONE_IN = 1000; |
|
struct A |
{ |
static _Atomic_word counter; |
A() |
{ |
__gnu_cxx::__atomic_add(&counter, 1); |
} |
~A() |
{ |
__gnu_cxx::__atomic_add(&counter, -1); |
} |
}; |
|
_Atomic_word A::counter = 0; |
|
typedef std::shared_ptr<A> sp_A_t; |
typedef std::weak_ptr<A> wp_A_t; |
|
typedef std::vector<sp_A_t> sp_vector_t; |
typedef std::vector<wp_A_t> wp_vector_t; |
|
struct shared_and_weak_pools |
{ |
sp_vector_t& shared_pool; |
wp_vector_t& weak_pool; |
|
shared_and_weak_pools(sp_vector_t& _shared_pool, wp_vector_t& _weak_pool) |
: shared_pool(_shared_pool), weak_pool(_weak_pool) |
{ } |
}; |
|
void* thread_hammer_and_kill(void* opaque_pools) |
{ |
shared_and_weak_pools& pools = *static_cast<shared_and_weak_pools*>(opaque_pools); |
// Using the same parameters as in the RNG test cases. |
std::mersenne_twister_engine< |
unsigned long, 32, 624, 397, 31, |
0x9908b0dful, 11, |
0xfffffffful, 7, |
0x9d2c5680ul, 15, |
0xefc60000ul, 18, 1812433253ul> rng; |
|
sp_vector_t::iterator cur_shared = pools.shared_pool.begin(); |
wp_vector_t::iterator cur_weak = pools.weak_pool.begin(); |
|
for (unsigned int i = 0; i < HAMMER_REPEAT; ++i) |
{ |
try |
{ |
sp_A_t strong(*cur_weak); |
} |
catch (std::bad_weak_ptr& exception) |
{ |
++cur_weak; |
if (cur_weak == pools.weak_pool.end()) |
break; |
} |
|
if (rng() % KILL_ONE_IN == 0) |
{ |
cur_shared->reset(); |
++cur_shared; |
} |
} |
return 0; |
} |
|
void* thread_hammer(void* opaque_weak) |
{ |
wp_vector_t& weak_pool = *static_cast<wp_vector_t*>(opaque_weak); |
// Using the same parameters as in the RNG test cases. |
std::mersenne_twister_engine< |
unsigned long, 32, 624, 397, 31, |
0x9908b0dful, 11, |
0xfffffffful, 7, |
0x9d2c5680ul, 15, |
0xefc60000ul, 18, 1812433253ul> rng; |
|
wp_vector_t::iterator cur_weak = weak_pool.begin(); |
|
for (unsigned int i = 0; i < HAMMER_REPEAT; ++i) |
{ |
try |
{ |
sp_A_t strong(*cur_weak); |
} |
catch (std::bad_weak_ptr& exception) |
{ |
++cur_weak; |
if (cur_weak == weak_pool.end()) |
break; |
} |
} |
return 0; |
} |
|
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
sp_vector_t obj_pool(POOL_SIZE); |
|
for(sp_vector_t::iterator cur = obj_pool.begin(); cur != obj_pool.end(); ++cur) |
{ |
cur->reset(new A); |
} |
// Obtain weak references. |
std::vector<wp_vector_t> weak_pool(HAMMER_MAX_THREADS, wp_vector_t(obj_pool.begin(), obj_pool.end())); |
|
// Launch threads with pointer to weak reference. |
pthread_t threads[HAMMER_MAX_THREADS]; |
#if defined(__sun) && defined(__svr4__) && _XOPEN_VERSION >= 500 |
pthread_setconcurrency (HAMMER_MAX_THREADS); |
#endif |
|
pthread_attr_t tattr; |
pthread_attr_init(&tattr); |
|
shared_and_weak_pools pools(obj_pool, weak_pool[0]); |
pthread_create(threads, &tattr, thread_hammer_and_kill, static_cast<void*>(&pools)); |
for (unsigned int worker = 1; worker < HAMMER_MAX_THREADS; worker++) |
{ |
if (pthread_create(&threads[worker], &tattr, |
thread_hammer, static_cast<void*>(&weak_pool[worker]))) |
std::abort(); |
} |
// Wait for threads to complete, then check integrity of reference. |
void* status; |
for (unsigned int worker = 0; worker < HAMMER_MAX_THREADS; worker++) |
{ |
if (pthread_join(threads[worker], &status)) |
std::abort(); |
} |
obj_pool.clear(); |
|
VERIFY( A::counter == 0 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/comparison/dr1401.cc
0,0 → 1,65
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2011 Free Software Foundation |
// |
// 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/>. |
|
// 20.7.2.2 Class template shared_ptr [util.smartptr.shared] |
|
#include <memory> |
|
// DR 1401 |
void test01() |
{ |
std::shared_ptr<int> ptr1, ptr2; |
if (ptr1 == ptr2) |
{ } |
if (ptr1 == nullptr) |
{ } |
if (nullptr == ptr1) |
{ } |
if (ptr1 != ptr2) |
{ } |
if (ptr1 != nullptr) |
{ } |
if (nullptr != ptr1) |
{ } |
if (ptr1 < ptr2) |
{ } |
if (ptr1 < nullptr) |
{ } |
if (nullptr < ptr1) |
{ } |
if (ptr1 <= ptr2) |
{ } |
if (ptr1 <= nullptr) |
{ } |
if (nullptr <= ptr1) |
{ } |
if (ptr1 > ptr2) |
{ } |
if (ptr1 > nullptr) |
{ } |
if (nullptr > ptr1) |
{ } |
if (ptr1 >= ptr2) |
{ } |
if (ptr1 >= nullptr) |
{ } |
if (nullptr >= ptr1) |
{ } |
} |
/comparison/cmp.cc
0,0 → 1,88
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
virtual ~A() { } |
}; |
|
struct B : A |
{ |
}; |
|
// 20.6.6.2.6 shared_ptr comparison [util.smartptr.shared.cmp] |
|
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
// test empty shared_ptrs compare equivalent |
std::shared_ptr<A> p1; |
std::shared_ptr<B> p2; |
VERIFY( p1 == p2 ); |
VERIFY( !(p1 != p2) ); |
VERIFY( !(p1 < p2) && !(p2 < p1) ); |
return 0; |
} |
|
|
// Construction from pointer |
int |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> A_default; |
|
std::shared_ptr<A> A_from_A(new A); |
VERIFY( A_default != A_from_A ); |
VERIFY( !(A_default == A_from_A) ); |
VERIFY( (A_default < A_from_A) || (A_from_A < A_default) ); |
|
std::shared_ptr<B> B_from_B(new B); |
VERIFY( B_from_B != A_from_A ); |
VERIFY( !(B_from_B == A_from_A) ); |
VERIFY( (B_from_B < A_from_A) || (A_from_A < B_from_B) ); |
|
A_from_A.reset(); |
VERIFY( A_default == A_from_A ); |
VERIFY( !(A_default != A_from_A) ); |
VERIFY( !(A_default < A_from_A) && !(A_from_A < A_default) ); |
|
B_from_B.reset(); |
VERIFY( B_from_B == A_from_A ); |
VERIFY( !(B_from_B != A_from_A) ); |
VERIFY( !(B_from_B < A_from_A) && !(A_from_A < B_from_B) ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
return 0; |
} |
/comparison/42925.cc
0,0 → 1,37
// { dg-options "-std=gnu++0x" } |
// { dg-do compile } |
|
// Copyright (C) 2010 Free Software Foundation |
// |
// 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/>. |
|
// 20.9.11.2 Class template shared_ptr [util.smartptr.shared] |
|
#include <memory> |
|
// libstdc++/42925 (also see GB 99) |
void test01() |
{ |
std::shared_ptr<int> ptr; |
if (ptr == 0) |
{ } |
if (0 == ptr) |
{ } |
if (ptr != 0) |
{ } |
if (0 != ptr) |
{ } |
} |
/comparison/less.cc
0,0 → 1,102
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.8.13.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
namespace std |
{ |
template<> |
struct less<A*> : binary_function<A*,A*,bool> |
{ |
static int count; |
bool operator()(A* l, A* r) { ++count; return l < r; } |
}; |
int less<A*>::count = 0; |
} |
|
// 20.8.13.2.7 shared_ptr comparison [util.smartptr.shared.cmp] |
|
|
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::less<std::shared_ptr<A>> less; |
// test empty shared_ptrs compare equivalent |
std::shared_ptr<A> p1; |
std::shared_ptr<A> p2; |
VERIFY( !less(p1, p2) && !less(p2, p1) ); |
VERIFY( std::less<A*>::count == 2 ); |
return 0; |
} |
|
|
// Construction from pointer |
int |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
std::less<std::shared_ptr<A>> less; |
|
std::shared_ptr<A> empty; |
std::shared_ptr<A> p1(new A); |
std::shared_ptr<A> p2(new A); |
|
VERIFY( less(p1, p2) || less(p2, p1) ); |
VERIFY( !(less(p1, p2) && less(p2, p1)) ); |
|
p1.reset(); |
VERIFY( !less(p1, empty) && !less(empty, p1) ); |
|
p2.reset(); |
VERIFY( !less(p1, p2) && !less(p2, p1) ); |
|
return 0; |
} |
|
// Aliasing |
int |
test03() |
{ |
bool test __attribute__((unused)) = true; |
|
std::less<std::shared_ptr<A>> less; |
|
A a; |
std::shared_ptr<A> p1(new A); |
std::shared_ptr<A> p2(p1, &a); |
VERIFY( less(p1, p2) || less(p2, p1) ); |
|
return 0; |
} |
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
return 0; |
} |
/observers/owner_before.cc
0,0 → 1,94
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.8.13.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
int i; |
virtual ~A() { } |
}; |
|
struct B : A |
{ |
}; |
|
// 20.6.6.2.5 shared_ptr observers [util.smartptr.shared.obs] |
|
void |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
// test empty shared_ptrs compare equivalent |
std::shared_ptr<A> p1; |
std::shared_ptr<B> p2; |
VERIFY( !p1.owner_before(p2) && !p2.owner_before(p1) ); |
} |
|
|
// Construction from pointer |
void |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> a0; |
|
std::shared_ptr<A> a1(new A); |
VERIFY( a1.owner_before(a0) || a0.owner_before(a1) ); |
VERIFY( !(a1.owner_before(a0) && a0.owner_before(a1)) ); |
|
std::shared_ptr<B> b1(new B); |
VERIFY( a1.owner_before(b1) || b1.owner_before(a1) ); |
VERIFY( !(a1.owner_before(b1) && b1.owner_before(a1)) ); |
|
std::shared_ptr<A> a2(a1); |
VERIFY( !a1.owner_before(a2) && !a2.owner_before(a1) ); |
a2 = b1; |
VERIFY( !b1.owner_before(a2) && !a2.owner_before(b1) ); |
|
std::weak_ptr<A> w1(a1); |
VERIFY( !a1.owner_before(w1) && !w1.owner_before(a1) ); |
std::weak_ptr<A> w2(a2); |
VERIFY( !b1.owner_before(w2) && !w2.owner_before(b1) ); |
} |
|
// Aliasing |
void |
test03() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> p1(new A()); |
std::shared_ptr<int> p2(p1, &p1->i); |
VERIFY( !p1.owner_before(p2) && !p2.owner_before(p1) ); |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
return 0; |
} |
/observers/get.cc
0,0 → 1,73
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A |
{ |
A() : i() {} |
int i; |
}; |
|
// 20.6.6.2.5 shared_ptr observers [util.smartptr.shared.obs] |
|
// get |
void |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
A * const a = new A; |
const std::shared_ptr<A> p(a); |
VERIFY( p.get() == a ); |
} |
|
// operator* |
void |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
A * const a = new A; |
const std::shared_ptr<A> p(a); |
VERIFY( &*p == a ); |
} |
|
// operator-> |
void |
test03() |
{ |
bool test __attribute__((unused)) = true; |
|
A * const a = new A; |
const std::shared_ptr<A> p(a); |
VERIFY( &p->i == &a->i ); |
} |
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
return 0; |
} |
/observers/bool_conv.cc
0,0 → 1,75
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.6.6.2.5 shared_ptr observers [util.smartptr.shared.obs] |
|
// conversion to bool |
void |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
const std::shared_ptr<A> p1; |
VERIFY( static_cast<bool>(p1) == false ); |
const std::shared_ptr<A> p2(p1); |
VERIFY( static_cast<bool>(p2) == false ); |
} |
|
void |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> p1(new A); |
VERIFY( static_cast<bool>(p1) ); |
std::shared_ptr<A> p2(p1); |
VERIFY( static_cast<bool>(p2) ); |
p1.reset(); |
VERIFY( !static_cast<bool>(p1) ); |
VERIFY( static_cast<bool>(p2) ); |
} |
|
void |
test03() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> p1(new A); |
std::shared_ptr<A> p2(p1); |
p2.reset(new A); |
VERIFY( static_cast<bool>(p1) ); |
VERIFY( static_cast<bool>(p2) ); |
} |
|
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
return 0; |
} |
/observers/use_count.cc
0,0 → 1,74
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
struct B : A { }; |
|
// 20.6.6.2.5 shared_ptr observers [util.smartptr.shared.obs] |
|
// use_count |
void |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
const std::shared_ptr<A> p1; |
VERIFY( p1.use_count() == 0 ); |
const std::shared_ptr<A> p2(p1); |
VERIFY( p1.use_count() == 0 ); |
} |
|
void |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> p1(new A); |
std::shared_ptr<A> p2(p1); |
p1.reset(); |
VERIFY( p1.use_count() == 0 ); |
VERIFY( p2.use_count() == 1 ); |
} |
|
void |
test03() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> p1(new A); |
std::shared_ptr<A> p2(p1); |
p2.reset(new B); |
VERIFY( p1.use_count() == 1 ); |
VERIFY( p2.use_count() == 1 ); |
} |
|
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
return 0; |
} |
/observers/unique.cc
0,0 → 1,75
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.6.6.2.5 shared_ptr observers [util.smartptr.shared.obs] |
|
// unique |
void |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
const std::shared_ptr<A> p1; |
VERIFY( !p1.unique() ); |
const std::shared_ptr<A> p2(p1); |
VERIFY( !p1.unique() ); |
} |
|
void |
test02() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> p1(new A); |
VERIFY( p1.unique() ); |
std::shared_ptr<A> p2(p1); |
VERIFY( !p1.unique() ); |
p1.reset(); |
VERIFY( !p1.unique() ); |
VERIFY( p2.unique() ); |
} |
|
void |
test03() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> p1(new A); |
std::shared_ptr<A> p2(p1); |
p2.reset(new A); |
VERIFY( p1.unique() ); |
VERIFY( p2.unique() ); |
} |
|
|
int |
main() |
{ |
test01(); |
test02(); |
test03(); |
return 0; |
} |
/misc/42019.cc
0,0 → 1,56
// { dg-options "-std=gnu++0x -fno-rtti" } |
// Copyright (C) 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.8.15.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
// libstdc++/42019 |
|
class A {}; |
|
struct B { |
explicit B(int i) : i(i) { } |
int i; |
}; |
|
void test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> spA = std::make_shared<A>(); |
|
VERIFY( spA.get() != 0 ); |
} |
|
void test02() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<B> spB = std::make_shared<B>(99); |
|
VERIFY( spB->i == 99 ); |
} |
|
int main() |
{ |
test01(); |
test02(); |
return 0; |
} |
/misc/io.cc
0,0 → 1,52
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <sstream> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.6.6.2.8 shared_ptr I/O [util.smartptr.shared.io] |
|
// operator<< |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<A> p(new A); |
std::ostringstream buf; |
buf << p; |
const std::string s = buf.str(); |
buf.str(""); |
buf << p.get(); |
VERIFY( s == buf.str() ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/misc/24595.cc
0,0 → 1,40
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
using std::get_deleter; |
|
// libstdc++/24595 |
void test01() |
{ |
bool test __attribute__((unused)) = true; |
|
std::shared_ptr<int> sp; |
VERIFY( !get_deleter<void(*)(int*)>(sp) ); |
} |
|
int main() |
{ |
test01(); |
return 0; |
} |
/misc/swap.cc
0,0 → 1,51
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared] |
|
#include <memory> |
#include <testsuite_hooks.h> |
|
struct A { }; |
|
// 20.6.6.2.9 shared_ptr specialized algorithms [util.smartptr.shared.spec] |
|
// std::swap |
int |
test01() |
{ |
bool test __attribute__((unused)) = true; |
|
A * const a1 = new A; |
A * const a2 = new A; |
std::shared_ptr<A> p1(a1); |
std::shared_ptr<A> p2(a2); |
std::swap(p1, p2); |
VERIFY( p1.get() == a2 ); |
VERIFY( p2.get() == a1 ); |
|
return 0; |
} |
|
int |
main() |
{ |
test01(); |
return 0; |
} |
/casts/1.cc
0,0 → 1,45
// { dg-options "-std=gnu++0x" } |
|
// Copyright (C) 2006, 2007, 2009 Free Software Foundation |
// |
// 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/>. |
|
// 20.6.6.2.10 shared_ptr casts [util.smartptr.shared.cast] |
|
#include <memory> |
#include <testsuite_tr1.h> |
|
// { dg-do compile } |
|
struct MyP { virtual ~MyP() { }; }; |
struct MyDP : MyP { }; |
|
int main() |
{ |
using __gnu_test::check_ret_type; |
using std::shared_ptr; |
using std::static_pointer_cast; |
using std::const_pointer_cast; |
using std::dynamic_pointer_cast; |
|
shared_ptr<double> spd; |
shared_ptr<const int> spci; |
shared_ptr<MyP> spa; |
|
check_ret_type<shared_ptr<void> >(static_pointer_cast<void>(spd)); |
check_ret_type<shared_ptr<int> >(const_pointer_cast<int>(spci)); |
check_ret_type<shared_ptr<MyDP> >(static_pointer_cast<MyDP>(spa)); |
} |