http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50496

--- Comment #4 from Markus Trippelsdorf <markus at trippelsdorf dot de> 
2011-09-24 18:23:15 UTC ---
I've found a new testcase that results in the same ICE:

 % < test.cpp
class GCAlloc {
};
class BaseAlloc {
};
class String;
class Base {
public:
     virtual void destroy( String *str ) const =0;
};
class String: public GCAlloc {
     const Base *m_class;
public:
     enum constants {
     };
     String( const char *data );
     ~String() {
          m_class->destroy( this );
     }
     void copy( const String &other );
     String & operator=( const char *other ) {
          copy( String( other ) );
     }
};
class ListElement: public BaseAlloc {
};
class List: public BaseAlloc {
     ListElement *m_head;
     void (*m_deletor)( void *);
public:
     List():       m_deletor(0) {
     }
     const void *back() const {
     }
     bool empty() const {
          return m_head == 0;
     }
     void popBack();
};
class FalconData: public BaseAlloc {
public:
     virtual ~FalconData() {
     }
};
class Stream: public FalconData {
};
class SrcLexer: public BaseAlloc {
     List m_streams;
     String m_whiteLead;
     void reset();
};
void SrcLexer::reset()
{
     m_whiteLead = "";
     while( ! m_streams.empty() ) {
          Stream *s = (Stream *) m_streams.back();
          m_streams.popBack();
          if ( !m_streams.empty() )          delete s;
     }
}

 % g++ -O2 test.cpp
test.ii: In member function ‘void SrcLexer::reset()’:
test.ii:59:1: internal compiler error: in redirect_jump, at jump.c:1497

Reply via email to