1 // PR debug/43290
2 // { dg-do compile }
3 // { dg-options "-O2" }
4 // { dg-options "-O3 -mavx -fPIC -mtune=core2" { target { { i?86-*-* x86_64-*-* } && { ilp32 && fpic } } } }
5 
6 namespace std
7 {
8   template <class> struct char_traits;
9 }
10 typedef struct { union { char __wchb[4]; }; } mbstate_t;
11 namespace std
12 {
13   template <typename _StateT> struct fpos
14   {
15     long long _M_off;
16     _StateT _M_state;
fposfpos17     fpos (long long):_M_off (), _M_state () { }
statefpos18     _StateT state () { return _M_state; }
19   };
20   typedef fpos <mbstate_t> streampos;
21 }
22 namespace std
23 {
24   template <> struct char_traits <char>
25   {
26     typedef streampos pos_type;
27     typedef long long off_type;
28     typedef mbstate_t state_type;
29   };
30 }
31 struct pthread_mutex_t;
32 namespace
33 {
34   enum _Ios_Openmode { _S_in = 3, _S_out };
35   enum _Ios_Seekdir { _S_beg };
36   struct ios_base
37   {
38     typedef _Ios_Openmode openmode;
39     static const openmode in = _S_in;
40     static const openmode out = _S_out;
41     typedef _Ios_Seekdir seekdir;
42     static const seekdir beg = _S_beg;
43   };
44   template < typename _CharT, typename > struct basic_streambuf
45   {
46     typedef _CharT char_type;
47     char_type * _M_in_beg;
48     char_type *eback () { return _M_in_beg; }
49     char_type *gptr () { return 0; }
50   };
51 }
52 namespace std
53 {
54   typedef struct pthread_mutex_t __c_lock;
55   template <typename> class __basic_file;
56   template <> struct __basic_file <char>
57   {
58     __basic_file (__c_lock * = 0);
59     bool is_open ();
60   };
61   template <typename _CharT, typename _Traits> struct basic_filebuf : public basic_streambuf <_CharT, _Traits>
62   {
63     typedef _CharT char_type;
64     typedef _Traits traits_type;
65     typedef typename traits_type::pos_type pos_type;
66     typedef typename traits_type::off_type off_type;
67     typedef __basic_file < char >__file_type;
68     typedef typename traits_type::state_type __state_type;
69     __file_type _M_file;
70     char_type *_M_pback_cur_save;
71     bool _M_pback_init;
72     void _M_destroy_pback () throw ()
73     {
74 	_M_pback_cur_save += this->gptr () != this->eback ();
75 	_M_pback_init = false;
76     }
77     bool is_open () throw () { return _M_file.is_open (); }
78     pos_type seekpos (pos_type, ios_base::openmode = ios_base::in | ios_base::out);
79     pos_type _M_seek (off_type, ios_base::seekdir, __state_type);
80   };
81   template <typename _CharT, typename _Traits>
82   typename basic_filebuf <_CharT, _Traits>::pos_type
83   basic_filebuf <_CharT, _Traits>::seekpos (pos_type __pos, ios_base::openmode)
84   {
85     pos_type __ret = (off_type ());
86     if (this->is_open ())
87       {
88 	_M_destroy_pback ();
89 	__ret = _M_seek (off_type (), ios_base::beg, __pos.state ());
90       }
91     return __ret;
92   }
93   template class basic_filebuf <char, char_traits <char> >;
94 }
95