* Martin Michlmayr <[EMAIL PROTECTED]> [2006-04-11 12:02]: > Anyway, you need "-O2 -Werror -c" to see the ICE with 4.2.
A test case from delta is attached but it's still fairly large. The ICE happens on AMD64, but not on i386. (sid)3578:[EMAIL PROTECTED]: ~/delta/bin] /usr/lib/gcc-snapshot/bin/g++ -O2 -Werror mini.c cc1plus: warnings being treated as errors mini.c: In function 'void do_update(int)': mini.c:278: warning: deprecated conversion from string constant to 'char*'' mini.c: At global scope: mini.c:340: error: inlined_to pointer is set but no predecesors found virtual SlaveProgress::~SlaveProgress()/96: (inline copy in void do_update(int)/17) availability:available(15) 35 insns (309 after inlining) tree externally_visible finalized inlinable called by: calls: OpProgress::~OpProgress()/2 (inlined) void operator delete(void*)/64 mini.c:340: internal compiler error: verify_cgraph_node failed Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. zsh: exit 1 /usr/lib/gcc-snapshot/bin/g++ -O2 -Werror mini.c (sid)3579:[EMAIL PROTECTED]: ~/delta/bin] -- Martin Michlmayr http://www.cyrius.com/
extern "C" { typedef long unsigned int size_t; __extension__ typedef unsigned int __mode_t; __extension__ typedef int __pid_t; __extension__ typedef long int __ssize_t; extern int snprintf (char *__restrict __s, size_t __maxlen, __const char *__restrict __format, ...) throw () __attribute__ ((__format__ (__printf__, 3, 4))); extern int memcmp (__const void *__s1, __const void *__s2, size_t __n) throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); extern "C" { typedef __ssize_t ssize_t; } extern void exit (int __status) throw () __attribute__ ((__noreturn__)); extern int access (__const char *__name, int __type) throw () __attribute__ ((__nonnull__ (1))); extern ssize_t read (int __fd, void *__buf, size_t __nbytes); extern __pid_t fork (void) throw (); } namespace std { template < typename _Alloc > class allocator; template < class _CharT > struct char_traits; template < typename _CharT, typename _Traits = char_traits < _CharT >, typename _Alloc = allocator < _CharT > >class basic_string; typedef basic_string < char >string; template < typename _Tp > inline const _Tp & min (const _Tp & __a, const _Tp & __b) { } } namespace __gnu_cxx { template < typename _Tp > class new_allocator { public:typedef size_t size_type; template < typename _Tp1 > struct rebind { typedef new_allocator < _Tp1 > other; }; }; } namespace std { template < typename _Tp > class allocator:public __gnu_cxx::new_allocator < _Tp > { }; template <> struct char_traits <char > { typedef char char_type; static int compare (const char_type * __s1, const char_type * __s2, size_t __n) { return memcmp (__s1, __s2, __n); } }; } typedef int _Atomic_word; namespace __gnu_cxx { _Atomic_word __attribute__ ((__unused__)) __exchange_and_add (volatile _Atomic_word * __mem, int __val); } namespace std { template < typename _CharT, typename _Traits, typename _Alloc > class basic_string { typedef typename _Alloc::template rebind < _CharT >::other _CharT_alloc_type; public:typedef _Traits traits_type; typedef _Alloc allocator_type; typedef typename _CharT_alloc_type::size_type size_type; private:struct _Rep_base { _Atomic_word _M_refcount; }; struct _Rep:_Rep_base { _CharT *_M_refdata () throw () { return reinterpret_cast < _CharT * >(this + 1); } void _M_dispose (const _Alloc & __a) { if (__builtin_expect (this != &_S_empty_rep (), false)) if (__gnu_cxx::__exchange_and_add (&this->_M_refcount, -1) <= 0) _M_destroy (__a); } void _M_destroy (const _Alloc &) throw (); }; struct _Alloc_hider:_Alloc { _Alloc_hider (_CharT * __dat, const _Alloc & __a):_Alloc (__a), _M_p (__dat) { } _CharT *_M_p; }; private:mutable _Alloc_hider _M_dataplus; _CharT *_M_data () const { } _Rep *_M_rep () const { return &((reinterpret_cast < _Rep * >(_M_data ()))[-1]); } static _Rep & _S_empty_rep () { } public:inline basic_string (); basic_string (const basic_string & __str); basic_string (const _CharT * __s, const _Alloc & __a = _Alloc ()); ~basic_string () { _M_rep ()->_M_dispose (this->get_allocator ()); } public:size_type size ()const { } basic_string & append (const basic_string & __str); const _CharT *c_str () const { return _M_data (); } const _CharT *data () const { } allocator_type get_allocator () const { return _M_dataplus; } int compare (const basic_string & __str) const { const size_type __size = this->size (); const size_type __osize = __str.size (); const size_type __len = std::min (__size, __osize); int __r = traits_type::compare (_M_data (), __str.data (), __len); } }; template < typename _CharT, typename _Traits, typename _Alloc > inline basic_string < _CharT, _Traits, _Alloc >::basic_string ():_M_dataplus (_S_empty_rep ()._M_refdata (), _Alloc ()) { } template < typename _CharT, typename _Traits, typename _Alloc > inline basic_string < _CharT, _Traits, _Alloc > operator+ (const basic_string < _CharT, _Traits, _Alloc > &__lhs, const _CharT * __rhs) { basic_string < _CharT, _Traits, _Alloc > __str (__lhs); __str.append (__rhs); } template < typename _CharT, typename _Traits, typename _Alloc > inline bool operator!= (const basic_string < _CharT, _Traits, _Alloc > &__lhs, const basic_string < _CharT, _Traits, _Alloc > &__rhs) { return __rhs.compare (__lhs) != 0; } extern template class basic_string < char >; } using std::string; class pkgSourceList { public:bool ReadMainList (); }; class OpProgress { string LastOp; string LastSubOp; protected:string Op; virtual ~ OpProgress () { }; }; class Configuration { public:string Find (const char *Name, const char *Default = 0) const; string FindDir (const char *Name, const char *Default = 0) const; }; extern Configuration * _config; class GlobalError { public:bool Errno (const char *Function, const char *Description, ...) __attribute__ ((format (printf, 3, 4))); inline bool PendingError () { }; }; GlobalError * _GetErrorObj (); extern "C" { extern "C" { extern int mkdir (__const char *__path, __mode_t __mode) throw () __attribute__ ((__nonnull__ (1))); } } void write_msg (int fd, unsigned char msgid, const std::string & str); bool copy_newer_recursive (const std::string & src, const std::string & dst); string syslistdir; string sysarchivedir; static void setup_archive_dir (int outfd); static void setup_list_dir (int outfd); class SlaveProgress: OpProgress { int fd; float reserve; public: SlaveProgress (int _fd, float _reserve = 0):fd (_fd), reserve (_reserve) { } }; static void dump_errors (unsigned char msgid, int fd) { string mylistdir = _config->FindDir ("Dir::State::Lists"); if (mylistdir != syslistdir) copy_newer_recursive (syslistdir, mylistdir); } static void do_update (int outfd) { setup_list_dir (outfd); setup_archive_dir (outfd); SlaveProgress progress (outfd); pkgSourceList sources; if (sources.ReadMainList () == false || _GetErrorObj ()->PendingError ()) { dump_errors (137, outfd); return; } switch (fork ()) { case 0: { char * authhelper = "/usr/lib/apt-watch" "/apt-watch-auth-helper"; } } } const char * HOME; static void setup_archive_dir (int outfd) { if (access (sysarchivedir.c_str (), 4 | 2 | 1) != 0) { if (!HOME) { write_msg (outfd, 137, "The HOME directory is not set, can't create a private cache directory."); exit (-1); } string myarchivedir = string (HOME) + "/.apt-watch/archives"; string partial = myarchivedir + "/partial"; } } static void setup_list_dir (int outfd) { if (access (syslistdir.c_str (), 4 | 2 | 1) != 0) { if (!HOME) { write_msg (outfd, 137, "The HOME directory variable is not set, can't create a private list directory."); } string mylistdir = string (HOME) + "/.apt-watch/lists"; string partial = mylistdir + "/partial"; if (access (partial.c_str (), 0) != 0) mkdir (partial.c_str (), 0755); } } bool slave_handle_input (int cmdfd, int outfd) { unsigned char c; if (read (cmdfd, &c, sizeof (c)) < (int) sizeof (c)) { } else switch (c) { case 0: do_update (outfd); { char s[1024]; snprintf (s, sizeof (s) - 1, "Bad command ID %d", c); write_msg (outfd, 137, s); } } }