// { dg-lto-do link }
// { dg-require-effective-target fpic }
// { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -O2}} }
// { dg-extra-ld-options "-O2 -fPIC -flto -flto-partition=1to1 -r -nostdlib -flinker-output=nolto-rel" }

typedef long int ptrdiff_t;
extern "C"
{
  typedef struct
  {
  }
  __mbstate_t;
  namespace std
  {
    class exception
    {
    };
  }
}
namespace std __attribute__ ((__visibility__ ("default")))
{
  template < typename _Alloc > class allocator;
  template < class _CharT > struct char_traits;
}
typedef __mbstate_t mbstate_t;
namespace std __attribute__ ((__visibility__ ("default")))
{
  using::mbstate_t;
  typedef ptrdiff_t streamsize;
  template < typename _CharT, typename _Traits =
    char_traits < _CharT > >class basic_istream;
  template < typename _CharT, typename _Traits =
    char_traits < _CharT >, typename _Alloc =
    allocator < _CharT > >class basic_stringbuf;
  class ios_base
  {
  public:class failure:public exception
    {
    };
    virtual ~ ios_base ();
  };
  template < typename _CharT, typename _Traits > class basic_streambuf
  {
  };
template < typename _CharT, typename _Traits > class basic_ios:public
    ios_base
  {
  };
template < typename _CharT, typename _Traits > class basic_istream:virtual public basic_ios < _CharT,
    _Traits
    >
  {
    typedef basic_streambuf < _CharT, _Traits > __streambuf_type;
  protected:streamsize _M_gcount;
  public: explicit basic_istream (__streambuf_type * __sb):_M_gcount (streamsize
	       (0))
    {
    }
  };
template < typename _CharT, typename _Traits, typename _Alloc > class basic_stringbuf:public basic_streambuf < _CharT,
    _Traits
    >
  {
  };
  template < typename V, typename I, typename S = std::mbstate_t > struct character
  {
  };
  typedef character < unsigned short, unsigned int >pod_ushort;
  typedef basic_stringbuf < pod_ushort > stringbuf_type;
  typedef basic_istream < pod_ushort > istream_type;
  stringbuf_type strbuf01;
  istream_type stream (&strbuf01);
}
