The crash is during compilation.
I run a Debian with the Linux kernel 2.6.14
The error is (with the recommended command line):

****************** BEGINNING OF GCC OUTPUT **********************************

$ gcc -v -save-temps -o ti_bug ti_bug.cc                                 Err 1
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v
--enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr
--enable-shared --with-system-zlib --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --enable-nls
--program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu
--enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo
--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr
--disable-werror --with-tune=i686 --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.0.4 20060422 (prerelease) (Debian 4.0.3-2)
 /usr/lib/gcc/i486-linux-gnu/4.0.4/cc1plus -E -quiet -v -D_GNU_SOURCE ti_bug.cc
-mtune=i686 -fpch-preprocess -o ti_bug.ii
ignoring nonexistent directory "/usr/local/include/i486-linux-gnu"
ignoring nonexistent directory "/usr/include/i486-linux-gnu"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4
 /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/i486-linux-gnu
 /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/backward
 /usr/local/include
 /usr/lib/gcc/i486-linux-gnu/4.0.4/include
 /usr/include
End of search list.
 /usr/lib/gcc/i486-linux-gnu/4.0.4/cc1plus -fpreprocessed ti_bug.ii -quiet
-dumpbase ti_bug.cc -mtune=i686 -auxbase ti_bug -version -o ti_bug.s
GNU C++ version 4.0.4 20060422 (prerelease) (Debian 4.0.3-2) (i486-linux-gnu)
        compiled by GNU C version 4.0.4 20060422 (prerelease) (Debian 4.0.3-2).
GGC heuristics: --param ggc-min-expand=90 --param ggc-min-heapsize=113348
ti_bug.cc: In function 'int main()':
ti_bug.cc:10: internal compiler error: in create_tmp_var, at gimplify.c:368
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
For Debian GNU/Linux specific bug reporting instructions,
see <URL:file:///usr/share/doc/gcc-4.0/README.Bugs>.

****************** END OF GCC OUTPUT **********************************

And here is the preprocessed file that cause the bug (there is nothing
afterward) :

# 1 "ti_bug.cc"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "ti_bug.cc"
# 1 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/typeinfo"
1 3
# 38 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/typeinfo"
3
# 1 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/exception"
1 3
# 40
"/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/exception" 3
#pragma GCC visibility push(default)

extern "C++" {

namespace std
{
# 54
"/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/exception" 3
  class exception
  {
  public:
    exception() throw() { }
    virtual ~exception() throw();


    virtual const char* what() const throw();
  };



  class bad_exception : public exception
  {
  public:
    bad_exception() throw() { }


    virtual ~bad_exception() throw();
  };


  typedef void (*terminate_handler) ();

  typedef void (*unexpected_handler) ();


  terminate_handler set_terminate(terminate_handler) throw();


  void terminate() __attribute__ ((__noreturn__));


  unexpected_handler set_unexpected(unexpected_handler) throw();


  void unexpected() __attribute__ ((__noreturn__));
# 102
"/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/exception" 3
  bool uncaught_exception() throw();
}

namespace __gnu_cxx
{
# 117
"/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/exception" 3
  void __verbose_terminate_handler ();
}

}

#pragma GCC visibility pop
# 39 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/typeinfo"
2 3

#pragma GCC visibility push(default)

extern "C++" {

namespace __cxxabiv1
{
  class __class_type_info;
}
# 59 "/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/typeinfo"
3
namespace std
{






  class type_info
  {
  public:




    virtual ~type_info();

  private:

    type_info& operator=(const type_info&);
    type_info(const type_info&);

  protected:
    const char *__name;

  protected:
    explicit type_info(const char *__n): __name(__n) { }

  public:



    const char* name() const
    { return __name; }
# 105
"/usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/typeinfo" 3
    bool before(const type_info& __arg) const
    { return __name < __arg.__name; }
    bool operator==(const type_info& __arg) const
    { return __name == __arg.__name; }

    bool operator!=(const type_info& __arg) const
    { return !operator==(__arg); }


  public:

    virtual bool __is_pointer_p() const;

    virtual bool __is_function_p() const;







    virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj,
       unsigned __outer) const;


    virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target,
        void **__obj_ptr) const;
  };






  class bad_cast : public exception
  {
  public:
    bad_cast() throw() { }


    virtual ~bad_cast() throw();
  };


  class bad_typeid : public exception
  {
  public:
    bad_typeid () throw() { }


    virtual ~bad_typeid() throw();
  };
}

#pragma GCC visibility pop

}
# 2 "ti_bug.cc" 2

struct A
{
  virtual ~A() {}
};

int main()
{
  typeid( typeid( *new A() ) );
  return 0;
}


-- 
           Summary: Compiler crash with typeid(typeid(*a))
           Product: gcc
           Version: 4.0.4
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: p dot barbierdereuille at free dot fr


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

Reply via email to