This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
g++ internal compiler error w/test case
- To: gcc-bugs at gcc dot gnu dot org
- Subject: g++ internal compiler error w/test case
- From: Dennis Taylor <dennis at funkplanet dot com>
- Date: Mon, 5 Jun 2000 20:36:06 -0700
I have a tiny (albeit contrived and broken) C++ class which
causes g++ to throw an internal compiler error. Here you go:
[dennis@bluesky util]$ uname -a
Linux bluesky 2.2.14-6.1.1 #7 Tue Apr 25 21:55:35 PDT 2000 i686 unknown
[dennis@bluesky util]$ c++ -v --save-temps -DHAVE_CONFIG_H -Wall -g -pedantic -O -c Test.cpp
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/specs
gcc version 2.95.2 19991024 (release)
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__ -Dunix -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS -D__OPTIMIZE__ -g -Wall -pedantic -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di686 -Dpentiumpro -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ -DHAVE_CONFIG_H Test.cpp Test.ii
GNU CPP version 2.95.2 19991024 (release) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../include/g++-3
/usr/local/include
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../i686-pc-linux-gnu/include
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include
/usr/include
End of search list.
The following default directories have been omitted from the search path:
End of omitted list.
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/cc1plus Test.ii -quiet -dumpbase Test.cc -g -O -Wall -pedantic -version -o Test.s
GNU C++ version 2.95.2 19991024 (release) (i686-pc-linux-gnu) compiled by GNU C version 2.95.2 19991024 (release).
Test.cpp:24: Internal compiler error.
Test.cpp:24: Please submit a full bug report.
Test.cpp:24: See <URL:http://www.gnu.org/software/gcc/faq.html#bugreport> for instructions.
The code and preprocessor output are attached. Thanks!
_________________________________________________________________________
Dennis Taylor "Anyone whose days are all the same and free from
dennis@funkplanet.com want inhabits eternity of a sort." - Peter Hoeg
_________________________________________________________________________
PGP Fingerprint: E8D6 9670 4FBD EEC3 6C6B 810B 2B30 E529 51BD 7B90
#include <cstdio>
template <class T>
class Test {
public:
Test();
T const& operator[]( const int foo );
~Test();
private:
int _foo;
T _bar;
};
template <class T>
Test<T>::Test() : _foo(42) { }
// This is the really broken bit. It should be Test<T>::operator[]. If
// you change it to return "int const&" instead, or if you add the
// "Test<T>::", it doesn't give the internal compiler error.
T const& operator[]( const int foo ) {
_foo = foo;
return _foo;
}
template <class T>
Test<T>::~Test() {
fprintf( "I gots no legs." );
}
# 1 "Test.cpp"
# 1 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../include/g++-3/cstdio" 1 3
# 1 "/usr/include/stdio.h" 1 3
# 1 "/usr/include/features.h" 1 3
# 138 "/usr/include/features.h" 3
# 196 "/usr/include/features.h" 3
# 1 "/usr/include/sys/cdefs.h" 1 3
# 71 "/usr/include/sys/cdefs.h" 3
# 103 "/usr/include/sys/cdefs.h" 3
# 250 "/usr/include/features.h" 2 3
# 1 "/usr/include/gnu/stubs.h" 1 3
# 278 "/usr/include/features.h" 2 3
# 27 "/usr/include/stdio.h" 2 3
extern "C" {
# 1 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 1 3
# 19 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 61 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 131 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
typedef unsigned int size_t;
# 271 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 283 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 317 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 33 "/usr/include/stdio.h" 2 3
# 1 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stdarg.h" 1 3
typedef void *__gnuc_va_list;
# 122 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stdarg.h" 3
# 209 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stdarg.h" 3
# 38 "/usr/include/stdio.h" 2 3
# 1 "/usr/include/bits/types.h" 1 3
# 1 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 1 3
# 19 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 61 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 131 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 188 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 271 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 283 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 317 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 29 "/usr/include/bits/types.h" 2 3
typedef unsigned char __u_char;
typedef unsigned short __u_short;
typedef unsigned int __u_int;
typedef unsigned long __u_long;
__extension__ typedef unsigned long long int __u_quad_t;
__extension__ typedef long long int __quad_t;
# 48 "/usr/include/bits/types.h" 3
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;
typedef __quad_t *__qaddr_t;
typedef __u_quad_t __dev_t;
typedef __u_int __uid_t;
typedef __u_int __gid_t;
typedef __u_long __ino_t;
typedef __u_int __mode_t;
typedef __u_int __nlink_t;
typedef long int __off_t;
typedef __quad_t __loff_t;
typedef int __pid_t;
typedef int __ssize_t;
typedef long int __rlim_t;
typedef __quad_t __rlim64_t;
typedef __u_int __id_t;
typedef struct
{
int __val[2];
} __fsid_t;
typedef int __daddr_t;
typedef char *__caddr_t;
typedef long int __time_t;
typedef long int __swblk_t;
typedef long int __clock_t;
typedef unsigned long int __fd_mask;
typedef struct
{
__fd_mask __fds_bits[1024 / (8 * sizeof (__fd_mask)) ];
} __fd_set;
typedef int __key_t;
typedef unsigned short int __ipc_pid_t;
typedef long int __blkcnt_t;
typedef __quad_t __blkcnt64_t;
typedef __u_long __fsblkcnt_t;
typedef __u_quad_t __fsblkcnt64_t;
typedef __u_long __fsfilcnt_t;
typedef __u_quad_t __fsfilcnt64_t;
typedef __u_long __ino64_t;
typedef __loff_t __off64_t;
typedef long int __t_scalar_t;
typedef unsigned long int __t_uscalar_t;
typedef int __intptr_t;
# 40 "/usr/include/stdio.h" 2 3
typedef struct _IO_FILE FILE;
# 1 "/usr/include/libio.h" 1 3
# 1 "/usr/include/_G_config.h" 1 3
# 1 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 1 3
# 19 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 61 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 131 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 188 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
typedef unsigned int wint_t;
# 317 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stddef.h" 3
# 14 "/usr/include/_G_config.h" 2 3
typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
# 30 "/usr/include/libio.h" 2 3
# 1 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stdarg.h" 1 3
# 122 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stdarg.h" 3
# 209 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include/stdarg.h" 3
# 48 "/usr/include/libio.h" 2 3
# 67 "/usr/include/libio.h" 3
# 98 "/usr/include/libio.h" 3
struct _IO_jump_t; struct _IO_FILE;
typedef void _IO_lock_t;
struct _IO_marker {
struct _IO_marker *_next;
struct _IO_FILE *_sbuf;
int _pos;
# 186 "/usr/include/libio.h" 3
};
struct _IO_FILE {
int _flags;
char* _IO_read_ptr;
char* _IO_read_end;
char* _IO_read_base;
char* _IO_write_base;
char* _IO_write_ptr;
char* _IO_write_end;
char* _IO_buf_base;
char* _IO_buf_end;
char *_IO_save_base;
char *_IO_backup_base;
char *_IO_save_end;
struct _IO_marker *_markers;
struct _IO_FILE *_chain;
int _fileno;
int _blksize;
__off_t _old_offset;
unsigned short _cur_column;
signed char _vtable_offset;
char _shortbuf[1];
_IO_lock_t *_lock;
__off64_t _offset;
int _unused2[16];
};
struct _IO_FILE_plus;
extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
typedef __ssize_t __io_read_fn (void * __cookie, char *__buf,
size_t __nbytes) ;
typedef __ssize_t __io_write_fn (void * __cookie, __const char *__buf,
size_t __n) ;
typedef int __io_seek_fn (void * __cookie, __off_t __pos, int __w) ;
typedef int __io_close_fn (void * __cookie) ;
# 311 "/usr/include/libio.h" 3
extern "C" {
extern int __underflow (_IO_FILE *) throw () ;
extern int __uflow (_IO_FILE *) throw () ;
extern int __overflow (_IO_FILE *, int) throw () ;
extern int _IO_getc (_IO_FILE *__fp) throw () ;
extern int _IO_putc (int __c, _IO_FILE *__fp) throw () ;
extern int _IO_feof (_IO_FILE *__fp) throw () ;
extern int _IO_ferror (_IO_FILE *__fp) throw () ;
extern int _IO_peekc_locked (_IO_FILE *__fp) throw () ;
extern void _IO_flockfile (_IO_FILE *) throw () ;
extern void _IO_funlockfile (_IO_FILE *) throw () ;
extern int _IO_ftrylockfile (_IO_FILE *) throw () ;
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
__gnuc_va_list , int *__restrict) throw () ;
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
__gnuc_va_list ) throw () ;
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t ) throw () ;
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t ) throw () ;
extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t , int, int) throw () ;
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t , int) throw () ;
extern void _IO_free_backup_area (_IO_FILE *) throw () ;
}
# 57 "/usr/include/stdio.h" 2 3
typedef __off_t fpos_t;
# 1 "/usr/include/bits/stdio_lim.h" 1 3
# 110 "/usr/include/stdio.h" 2 3
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
extern int remove (__const char *__filename) throw () ;
extern int rename (__const char *__old, __const char *__new) throw () ;
extern FILE *tmpfile (void) throw () ;
extern char *tmpnam (char *__s) throw () ;
extern char *tmpnam_r (char *__s) throw () ;
extern char *tempnam (__const char *__dir, __const char *__pfx) throw () ;
extern int fclose (FILE *__stream) throw () ;
extern int fflush (FILE *__stream) throw () ;
extern int fflush_unlocked (FILE *__stream) throw () ;
extern FILE *fopen (__const char *__restrict __filename,
__const char *__restrict __modes) throw () ;
extern FILE *freopen (__const char *__restrict __filename,
__const char *__restrict __modes,
FILE *__restrict __stream) throw () ;
# 201 "/usr/include/stdio.h" 3
extern FILE *fdopen (int __fd, __const char *__modes) throw () ;
# 227 "/usr/include/stdio.h" 3
extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw () ;
extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
int __modes, size_t __n) throw () ;
extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
size_t __size) throw () ;
extern void setlinebuf (FILE *__stream) throw () ;
extern int fprintf (FILE *__restrict __stream,
__const char *__restrict __format, ...) throw () ;
extern int printf (__const char *__restrict __format, ...) throw () ;
extern int sprintf (char *__restrict __s,
__const char *__restrict __format, ...) throw () ;
extern int vfprintf (FILE *__restrict __s,
__const char *__restrict __format,
__gnuc_va_list __arg) throw () ;
extern int vprintf (__const char *__restrict __format,
__gnuc_va_list __arg) throw () ;
extern int vsprintf (char *__restrict __s,
__const char *__restrict __format,
__gnuc_va_list __arg) throw () ;
extern int snprintf (char *__restrict __s, size_t __maxlen,
__const char *__restrict __format, ...) throw ()
__attribute__ ((__format__ (__printf__, 3, 4)));
extern int __vsnprintf (char *__restrict __s, size_t __maxlen,
__const char *__restrict __format,
__gnuc_va_list __arg) throw ()
__attribute__ ((__format__ (__printf__, 3, 0)));
extern int vsnprintf (char *__restrict __s, size_t __maxlen,
__const char *__restrict __format,
__gnuc_va_list __arg) throw ()
__attribute__ ((__format__ (__printf__, 3, 0)));
# 306 "/usr/include/stdio.h" 3
extern int fscanf (FILE *__restrict __stream,
__const char *__restrict __format, ...) throw () ;
extern int scanf (__const char *__restrict __format, ...) throw () ;
extern int sscanf (__const char *__restrict __s,
__const char *__restrict __format, ...) throw () ;
# 334 "/usr/include/stdio.h" 3
extern int fgetc (FILE *__stream) throw () ;
extern int getc (FILE *__stream) throw () ;
extern int getchar (void) throw () ;
extern int getc_unlocked (FILE *__stream) throw () ;
extern int getchar_unlocked (void) throw () ;
extern int fgetc_unlocked (FILE *__stream) throw () ;
extern int fputc (int __c, FILE *__stream) throw () ;
extern int putc (int __c, FILE *__stream) throw () ;
extern int putchar (int __c) throw () ;
extern int fputc_unlocked (int __c, FILE *__stream) throw () ;
extern int putc_unlocked (int __c, FILE *__stream) throw () ;
extern int putchar_unlocked (int __c) throw () ;
extern int getw (FILE *__stream) throw () ;
extern int putw (int __w, FILE *__stream) throw () ;
extern char *fgets (char *__restrict __s, int __n,
FILE *__restrict __stream) throw () ;
extern char *gets (char *__s) throw () ;
# 424 "/usr/include/stdio.h" 3
extern int fputs (__const char *__restrict __s,
FILE *__restrict __stream) throw () ;
extern int puts (__const char *__s) throw () ;
extern int ungetc (int __c, FILE *__stream) throw () ;
extern size_t fread (void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __stream) throw () ;
extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __s) throw () ;
extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __stream) throw () ;
extern size_t fwrite_unlocked (__const void *__restrict __ptr,
size_t __size, size_t __n,
FILE *__restrict __stream) throw () ;
extern int fseek (FILE *__stream, long int __off, int __whence) throw () ;
extern long int ftell (FILE *__stream) throw () ;
extern void rewind (FILE *__stream) throw () ;
typedef __off_t off_t;
extern int fgetpos (FILE *__restrict __stream,
fpos_t *__restrict __pos) throw () ;
extern int fsetpos (FILE *__stream, __const fpos_t *__pos) throw () ;
# 523 "/usr/include/stdio.h" 3
# 533 "/usr/include/stdio.h" 3
extern void clearerr (FILE *__stream) throw () ;
extern int feof (FILE *__stream) throw () ;
extern int ferror (FILE *__stream) throw () ;
extern void clearerr_unlocked (FILE *__stream) throw () ;
extern int feof_unlocked (FILE *__stream) throw () ;
extern int ferror_unlocked (FILE *__stream) throw () ;
extern void perror (__const char *__s) throw () ;
extern int sys_nerr;
extern __const char *__const sys_errlist[];
extern int fileno (FILE *__stream) throw () ;
extern int fileno_unlocked (FILE *__stream) throw () ;
extern FILE *popen (__const char *__command, __const char *__modes) throw () ;
extern int pclose (FILE *__stream) throw () ;
extern char *ctermid (char *__s) throw () ;
# 607 "/usr/include/stdio.h" 3
extern void flockfile (FILE *__stream) throw () ;
extern int ftrylockfile (FILE *__stream) throw () ;
extern void funlockfile (FILE *__stream) throw () ;
# 1 "/usr/include/bits/stdio.h" 1 3
inline int
vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg) throw ()
{
return vfprintf (stdout , __fmt, __arg);
}
inline int
getchar (void) throw ()
{
return _IO_getc (stdin );
}
inline int
getc_unlocked (FILE *__fp) throw ()
{
return (( __fp )->_IO_read_ptr >= ( __fp )->_IO_read_end ? __uflow ( __fp ) : *(unsigned char *) ( __fp )->_IO_read_ptr++) ;
}
inline int
getchar_unlocked (void) throw ()
{
return (( stdin )->_IO_read_ptr >= ( stdin )->_IO_read_end ? __uflow ( stdin ) : *(unsigned char *) ( stdin )->_IO_read_ptr++) ;
}
inline int
putchar (int __c) throw ()
{
return _IO_putc (__c, stdout );
}
inline int
fputc_unlocked (int __c, FILE *__stream) throw ()
{
return ((( __stream )->_IO_write_ptr >= ( __stream )->_IO_write_end) ? __overflow ( __stream , (unsigned char) ( __c )) : (unsigned char) (*( __stream )->_IO_write_ptr++ = ( __c ))) ;
}
inline int
putc_unlocked (int __c, FILE *__stream) throw ()
{
return ((( __stream )->_IO_write_ptr >= ( __stream )->_IO_write_end) ? __overflow ( __stream , (unsigned char) ( __c )) : (unsigned char) (*( __stream )->_IO_write_ptr++ = ( __c ))) ;
}
inline int
putchar_unlocked (int __c) throw ()
{
return ((( stdout )->_IO_write_ptr >= ( stdout )->_IO_write_end) ? __overflow ( stdout , (unsigned char) ( __c )) : (unsigned char) (*( stdout )->_IO_write_ptr++ = ( __c ))) ;
}
inline int
feof_unlocked (FILE *__stream) throw ()
{
return ((( __stream )->_flags & 0x10 ) != 0) ;
}
inline int
ferror_unlocked (FILE *__stream) throw ()
{
return ((( __stream )->_flags & 0x20 ) != 0) ;
}
# 149 "/usr/include/bits/stdio.h" 3
# 165 "/usr/include/bits/stdio.h" 3
# 635 "/usr/include/stdio.h" 2 3
}
# 6 "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../include/g++-3/cstdio" 2 3
# 2 "Test.cpp" 2
template <class T>
class Test {
public:
Test();
T const& operator[]( const int foo );
~Test();
private:
int _foo;
T _bar;
};
template <class T>
Test<T>::Test() : _foo(42) { }
T const& operator[]( const int foo ) {
_foo = foo;
return _foo;
}
template <class T>
Test<T>::~Test() {
fprintf( "I gots no legs." );
}