1// { dg-do run } 2// { dg-options "-std=gnu++11 -g -O0" } 3 4// Copyright (C) 2012-2015 Free Software Foundation, Inc. 5// 6// This file is part of the GNU ISO C++ Library. This library is free 7// software; you can redistribute it and/or modify it under the 8// terms of the GNU General Public License as published by the 9// Free Software Foundation; either version 3, or (at your option) 10// any later version. 11 12// This library is distributed in the hope that it will be useful, 13// but WITHOUT ANY WARRANTY; without even the implied warranty of 14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15// GNU General Public License for more details. 16 17// You should have received a copy of the GNU General Public License along 18// with this library; see the file COPYING3. If not see 19// <http://www.gnu.org/licenses/>. 20 21#include <memory> 22#include <iostream> 23 24template<class T> 25void 26placeholder(const T &s) 27{ 28 std::cout << s; 29} 30 31template<class T> 32void 33use(const T &p) 34{ 35 placeholder(&p); 36} 37 38struct deleter { void operator()(int*) {} }; 39 40std::shared_ptr<int> make(uintptr_t p) 41{ 42 return std::shared_ptr<int>(reinterpret_cast<int*>(p), deleter()); 43} 44 45int 46main() 47{ 48 typedef std::shared_ptr<int> shared; 49 typedef std::weak_ptr<int> weak; 50 51 shared esp; 52// { dg-final { note-test esp "std::shared_ptr (empty) 0x0" } } 53 weak ewp1; 54// { dg-final { note-test ewp1 "std::weak_ptr (empty) 0x0" } } 55 weak ewp2 = esp; 56// { dg-final { note-test ewp2 "std::weak_ptr (empty) 0x0" } } 57 58 shared sp1 = make(0x12345678); 59 shared sp2 = sp1; 60// { dg-final { note-test sp1 "std::shared_ptr (count 2, weak 0) 0x12345678" } } 61 62 shared sp3 = make(0x12344321); 63 weak sp4 = sp3; 64 weak wp1 = sp3; 65// { dg-final { note-test wp1 "std::weak_ptr (count 1, weak 2) 0x12344321" } } 66 67 shared sp5 = make(0x56788765); 68 weak wp2 = sp5; 69 sp5.reset(); 70// { dg-final { note-test wp2 "std::weak_ptr (expired, weak 1) 0x56788765" } } 71 72 placeholder(""); // Mark SPOT 73 use(esp); 74 use(ewp1); 75 use(ewp2); 76 use(sp1); 77 use(wp1); 78 use(wp2); 79 80 return 0; 81} 82 83// { dg-final { gdb-test SPOT } } 84