1 // { dg-do compile }
2 // { dg-options "-O3 -ftracer -fsched-pressure -Wno-unused-parameter -Wno-return-type" }
3 
4 extern "C"
5 {
6   namespace std
7   {
8     class exception
9     {
10       virtual const char *what () const throw ();
11     };
12   }
13 }
14 namespace std __attribute__ ((__visibility__ ("default")))
15 {
16   template < typename _Alloc > class allocator;
17   template < class _CharT > struct char_traits;
18   template < typename _CharT, typename _Traits =
19     char_traits < _CharT >, typename _Alloc =
20     allocator < _CharT > >class basic_string;
21   typedef basic_string < char >string;
22   template < typename _CharT, typename _Traits =
23     char_traits < _CharT > >class basic_ios;
24   typedef basic_ios < char >ios;
25 }
26 
27 namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
28 {
29   template < typename _Tp > class new_allocator
30   {
31   };
32 }
33 
34 namespace std __attribute__ ((__visibility__ ("default")))
35 {
36 template < typename _Tp > class allocator:public __gnu_cxx::new_allocator <
37     _Tp >
38   {
39   };
40 }
41 
42 typedef int _Atomic_word;
43 namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
44 {
45   static inline _Atomic_word
__exchange_and_add_dispatch(_Atomic_word * __mem,int __val)46     __attribute__ ((__unused__)) __exchange_and_add_dispatch (_Atomic_word *
47 							      __mem,
48 							      int __val)
49   {
50   }
51 }
52 
53 namespace std __attribute__ ((__visibility__ ("default")))
54 {
55   template < typename _CharT, typename _Traits,
56     typename _Alloc > class basic_string
57   {
58     typedef _Alloc allocator_type;
59   private:struct _Rep_base
60     {
61       _Atomic_word _M_refcount;
62     };
63     struct _Rep:_Rep_base
64     {
_M_dispose_Rep65       void _M_dispose (const _Alloc & __a)
66       {
67 	if (__builtin_expect (this != &_S_empty_rep (), false))
68 	  {
69 	    if (__gnu_cxx::
70 		__exchange_and_add_dispatch (&this->_M_refcount, -1) <= 0)
71 	      {
72 		_M_destroy (__a);
73 	      }
74 	  }
75       }
76       void _M_destroy (const _Alloc &) throw ();
77     };
78     struct _Alloc_hider:_Alloc
79     {
80       _CharT *_M_p;
81     };
82   private:mutable _Alloc_hider _M_dataplus;
_M_data()83     _CharT *_M_data () const
84     {
85       return _M_dataplus._M_p;
86     }
_M_rep()87     _Rep *_M_rep () const
88     {
89       return &((reinterpret_cast < _Rep * >(_M_data ()))[-1]);
90     }
_S_empty_rep()91     static _Rep & _S_empty_rep ()
92     {
93     }
basic_string()94   public: basic_string ():_M_dataplus (_S_empty_rep ()._M_refdata (),
95 		 _Alloc ())
96     {
97     }
98     basic_string (const _CharT * __s, const _Alloc & __a = _Alloc ());
~basic_string()99     ~basic_string ()
100     {
101       _M_rep ()->_M_dispose (this->get_allocator ());
102     }
get_allocator()103     allocator_type get_allocator () const
104     {
105     }
106   };
107   class ios_base
108   {
109   public:class failure:public exception
110     {
111     public:explicit failure (const string & __str) throw ();
112     };
113   };
114 template < typename _CharT, typename _Traits > class basic_ios:public
115     ios_base
116   {
117   };
118   namespace iostreams
119   {
120     class zlib_error:public std::ios::failure
121     {
122     public:explicit zlib_error (int error);
123     private:int error_;
124     };
zlib_error(int error)125       zlib_error::zlib_error (int error):std::ios::failure ("zlib error"),
126       error_ (error)
127     {
128     }
129   }
130 }
131