[Bug middle-end/65074] New: [5 Regression] r220674 broke C++ PIEs

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sun Feb 15 22:27:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65074

            Bug ID: 65074
           Summary: [5 Regression] r220674 broke C++ PIEs
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jakub at gcc dot gnu.org
                CC: hjl at gcc dot gnu.org, rth at gcc dot gnu.org

namespace std
{
  template <typename _CharT> struct char_traits;
  template <typename _CharT, typename = char_traits <_CharT> > class
basic_filebuf;
  template <typename _CharT, typename = char_traits <_CharT> > class
basic_ifstream;
  typedef basic_ifstream <char> ifstream;
  enum _Ios_Openmode { _S_in };
  class basic_streambuf
  {
  };
  struct basic_ios
  {
    typedef char char_type;
    void init (void *);
    typedef _Ios_Openmode openmode;
  };
  template <typename _CharT> class __basic_file;
  template <> struct __basic_file <char>
  {
    __basic_file ();
    ~__basic_file ();
  };
  template <typename, typename _Traits> struct basic_filebuf : public
basic_streambuf
  {
    __basic_file <char> _M_file;
    ~basic_filebuf () { this->close (); }
    void close ();
  };
  template <typename, typename _Traits> struct basic_ifstream : basic_ios
  {
    typedef _Traits traits_type;
    basic_filebuf <char_type, traits_type> _M_filebuf;
    basic_ifstream ();
    basic_ifstream (const char *, basic_ios::openmode = _S_in)
    {
      this->init (0);
    }
  };
  extern template class basic_filebuf <char>;
  ifstream f (0);
}

with -O2 -fpie starting with r220674 uses
call _ZNSt13basic_filebufIcSt11char_traitsIcEED1Ev
instead of
call _ZNSt13basic_filebufIcSt11char_traitsIcEED1Ev@PLT
that was used previously, despite that symbol being defined in libstdc++.so.6.



More information about the Gcc-bugs mailing list