This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

cc1 core dump (egcs 2.96 dated 12th February 1999)


Invalid types in a structure can cause cc1 to die when you refer to
members of the structure. A minimal test program is
#include <stdio.h>
int main(void)
{
  struct { char x; undefined type y; } v;
#if 0
  FILE *f=fopen("conftestval", "w");
  int d;
  if (!f) exit(1);
#endif
  d=((unsigned char *) &v.y)-((unsigned char *) &v.x);
#if 0
  if (d<0) { d=-d; }
  fprintf(f, "%d\n", d);
  exit(0);
#endif
}
The bug appears to be parsing a dud pointer to comptypes (or gdb
suggests it)
bash-2.02$  /usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/cpp -lang-c -v -D__GNUC__=2 -D__GNUC_MINOR__=96 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem\(posix\) -g -Acpu\(i386\) -Amachine\(i386\) -Di386 -D__i386 -D__i386__ -D__tune_pentiumpro__ out.c -o /tmp/out.i
GNU CPP version 2.96 20000211 (experimental) (cpplib)
 (i386 Linux/ELF)
out.c:4: warning: no semicolon at end of struct or union
out.c: At top level:
out.c:4: warning: data definition has no type or storage class
out.c:10: request for member `y' in something not a structure or union
out.c:10: request for member `x' in something not a structure or union

Program received signal SIGSEGV, Segmentation fault.
0x81e8427 in comptypes (type1=0x6e692074, type2=0x40019400) at c-typeck.c:434
434       if (t1 == t2 || !t1 || !t2
(gdb) bt
#0  0x81e8427 in comptypes (type1=0x6e692074, type2=0x40019400)
    at c-typeck.c:434
#1  0x81ed913 in digest_init (type=0x40019400, init=0x40133220, 
    require_constant=1, constructor_constant=1) at c-typeck.c:4627
#2  0x81ed35f in store_init_value (decl=0x40131e80, init=0x40133220)
    at c-typeck.c:4321
#3  0x81e3ef9 in finish_decl (decl=0x40131e80, init=0x40133220, 
    asmspec_tree=0x0) at c-decl.c:3424
#4  0x81d9bfe in yyparse () at c-parse.y:1013
#5  0x804bad4 in compile_file (name=0x40104e40 "/tmp/out.i") at toplev.c:2374
#6  0x804f31b in main (argc=9, argv=0xbffffc14) at toplev.c:4769
(gdb) print *t1
Cannot access memory at address 0x6e692074.
(gdb) quit

The output of cpp is
# 1 "out.c"
# 1 "/usr/include/stdio.h" 1 3
 
# 18 "/usr/include/stdio.h" 3

 







# 1 "/usr/local/include/features.h" 1 3
 
# 18 "/usr/local/include/features.h" 3




 
# 79 "/usr/local/include/features.h" 3


 



















 





 



 







 
# 137 "/usr/local/include/features.h" 3


 









 





 



























# 195 "/usr/local/include/features.h" 3


































 



 








 




 

# 1 "/usr/include/sys/cdefs.h" 1 3
 
# 18 "/usr/include/sys/cdefs.h" 3




 




 





 








 




# 71 "/usr/include/sys/cdefs.h" 3


 







 



# 103 "/usr/include/sys/cdefs.h" 3



 








 
# 124 "/usr/include/sys/cdefs.h" 3







 








 








 









 







# 249 "/usr/local/include/features.h" 2 3


 








 





 

 








# 1 "/usr/include/gnu/stubs.h" 1 3
 







































# 277 "/usr/local/include/features.h" 2 3




# 27 "/usr/include/stdio.h" 2 3


 



# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 1 3
 
# 19 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3

 






 








 


# 48 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3



 


 





 


# 90 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3


 





 


















 





 

 

# 160 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3


 

 


































typedef unsigned int size_t;






















 




 

# 296 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3


# 308 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3


 

 
# 341 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3




 





















# 33 "/usr/include/stdio.h" 2 3





# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stdarg.h" 1 3
 
# 19 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stdarg.h" 3

 






 











 



typedef __builtin_va_list __gnuc_va_list;


 

# 135 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stdarg.h" 3




# 38 "/usr/include/stdio.h" 2 3


# 1 "/usr/include/bits/types.h" 1 3
 
# 18 "/usr/include/bits/types.h" 3

 









# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 1 3
 
# 19 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3

 






 








 


# 48 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3



 


 





 


# 90 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3


 





 


















 





 

 

# 160 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3


 

 


# 217 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3





 




 

# 296 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3


# 308 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3


 

 
# 341 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/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 int __t_scalar_t;
typedef unsigned 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
 
# 26 "/usr/include/libio.h" 3




# 1 "/usr/include/_G_config.h" 1 3
 





 






# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 1 3
 
# 19 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3

 






 








 


# 48 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3



 


 





 


# 90 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3


 





 


















 





 

 

# 160 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3


 

 


# 217 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3





 




 





























 
# 267 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stddef.h" 3













typedef long int wchar_t;
























typedef unsigned int wint_t;




 

 
# 341 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/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/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stdarg.h" 1 3
 
# 19 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/include/stdarg.h" 3

 






 











 






 

# 135 "/usr/lib/gcc-lib/i686-pc-linux-gnu/2.96/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];

};


typedef struct _IO_FILE _IO_FILE;


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);
# 264 "/usr/include/libio.h" 3

 





typedef __ssize_t __io_write_fn (void * __cookie, __const char *__buf,
				      size_t __n);
# 273 "/usr/include/libio.h" 3

 





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 int __underflow (_IO_FILE *)  ;
extern int __uflow (_IO_FILE *)  ;
extern int __overflow (_IO_FILE *, int)  ;
















extern int _IO_getc (_IO_FILE *__fp)  ;
extern int _IO_putc (int __c, _IO_FILE *__fp)  ;
extern int _IO_feof (_IO_FILE *__fp)  ;
extern int _IO_ferror (_IO_FILE *__fp)  ;

extern int _IO_peekc_locked (_IO_FILE *__fp)  ;

 



extern void _IO_flockfile (_IO_FILE *)  ;
extern void _IO_funlockfile (_IO_FILE *)  ;
extern int _IO_ftrylockfile (_IO_FILE *)  ;












extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
			     __gnuc_va_list, int *__restrict)  ;
# 365 "/usr/include/libio.h" 3
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
			      __gnuc_va_list)  ;
# 367 "/usr/include/libio.h" 3
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t)  ;
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t)  ;

extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int)  ;
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int)  ;

extern void _IO_free_backup_area (_IO_FILE *)  ;






# 57 "/usr/include/stdio.h" 2 3


 

typedef __off_t fpos_t;







 





 





 






 







 




 
# 110 "/usr/include/stdio.h" 3
# 1 "/usr/include/bits/stdio_lim.h" 1 3
 
# 18 "/usr/include/bits/stdio_lim.h" 3




















# 110 "/usr/include/stdio.h" 2 3



 
extern FILE *stdin;		 
extern FILE *stdout;		 
extern FILE *stderr;		 


 
extern int remove (__const char *__filename)  ;
 
extern int rename (__const char *__old, __const char *__new)  ;


 

extern FILE *tmpfile (void)  ;










 
extern char *tmpnam (char *__s)  ;


 

extern char *tmpnam_r (char *__s)  ;




 






extern char *tempnam (__const char *__dir, __const char *__pfx)  ;



 
extern int fclose (FILE *__stream)  ;
 
extern int fflush (FILE *__stream)  ;


 
extern int fflush_unlocked (FILE *__stream)  ;









 
extern FILE *fopen (__const char *__restrict __filename,
			 __const char *__restrict __modes)  ;
# 180 "/usr/include/stdio.h" 3
 
extern FILE *freopen (__const char *__restrict __filename,
			   __const char *__restrict __modes,
			   FILE *__restrict __stream)  ;
# 184 "/usr/include/stdio.h" 3
# 197 "/usr/include/stdio.h" 3










 
extern FILE *fdopen (int __fd, __const char *__modes)  ;


# 223 "/usr/include/stdio.h" 3



 

extern void setbuf (FILE *__restrict __stream, char *__restrict __buf)  ;
 


extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
			 int __modes, size_t __n)  ;
# 234 "/usr/include/stdio.h" 3


 

extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
			    size_t __size)  ;
# 240 "/usr/include/stdio.h" 3

 
extern void setlinebuf (FILE *__stream)  ;



 
extern int fprintf (FILE *__restrict __stream,
			 __const char *__restrict __format, ...)  ;
# 249 "/usr/include/stdio.h" 3
 
extern int printf (__const char *__restrict __format, ...)  ;
 
extern int sprintf (char *__restrict __s,
			 __const char *__restrict __format, ...)  ;
# 254 "/usr/include/stdio.h" 3

 
extern int vfprintf (FILE *__restrict __s,
			  __const char *__restrict __format,
			  __gnuc_va_list __arg)  ;
# 259 "/usr/include/stdio.h" 3
 
extern int vprintf (__const char *__restrict __format,
			 __gnuc_va_list __arg)  ;
# 262 "/usr/include/stdio.h" 3
 
extern int vsprintf (char *__restrict __s,
			  __const char *__restrict __format,
			  __gnuc_va_list __arg)  ;
# 266 "/usr/include/stdio.h" 3


 
extern int snprintf (char *__restrict __s, size_t __maxlen,
			  __const char *__restrict __format, ...)  
# 271 "/usr/include/stdio.h" 3
     __attribute__ ((__format__ (__printf__, 3, 4)));

extern int __vsnprintf (char *__restrict __s, size_t __maxlen,
			     __const char *__restrict __format,
			     __gnuc_va_list __arg)  
# 276 "/usr/include/stdio.h" 3
     __attribute__ ((__format__ (__printf__, 3, 0)));
extern int vsnprintf (char *__restrict __s, size_t __maxlen,
			   __const char *__restrict __format,
			   __gnuc_va_list __arg)  
# 280 "/usr/include/stdio.h" 3
     __attribute__ ((__format__ (__printf__, 3, 0)));


# 302 "/usr/include/stdio.h" 3



 
extern int fscanf (FILE *__restrict __stream,
			__const char *__restrict __format, ...)  ;
# 308 "/usr/include/stdio.h" 3
 
extern int scanf (__const char *__restrict __format, ...)  ;
 
extern int sscanf (__const char *__restrict __s,
			__const char *__restrict __format, ...)  ;
# 313 "/usr/include/stdio.h" 3

# 330 "/usr/include/stdio.h" 3



 
extern int fgetc (FILE *__stream)  ;
extern int getc (FILE *__stream)  ;

 
extern int getchar (void)  ;

 




 
extern int getc_unlocked (FILE *__stream)  ;
extern int getchar_unlocked (void)  ;



 
extern int fgetc_unlocked (FILE *__stream)  ;



 
extern int fputc (int __c, FILE *__stream)  ;
extern int putc (int __c, FILE *__stream)  ;

 
extern int putchar (int __c)  ;

 




 
extern int fputc_unlocked (int __c, FILE *__stream)  ;



 
extern int putc_unlocked (int __c, FILE *__stream)  ;
extern int putchar_unlocked (int __c)  ;




 
extern int getw (FILE *__stream)  ;

 
extern int putw (int __w, FILE *__stream)  ;



 
extern char *fgets (char *__restrict __s, int __n,
			 FILE *__restrict __stream)  ;
# 391 "/usr/include/stdio.h" 3







 

extern char *gets (char *__s)  ;


# 420 "/usr/include/stdio.h" 3



 
extern int fputs (__const char *__restrict __s,
		       FILE *__restrict __stream)  ;
# 426 "/usr/include/stdio.h" 3







 
extern int puts (__const char *__s)  ;


 
extern int ungetc (int __c, FILE *__stream)  ;


 
extern size_t fread (void *__restrict __ptr, size_t __size,
			  size_t __n, FILE *__restrict __stream)  ;
# 444 "/usr/include/stdio.h" 3
 
extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
			   size_t __n, FILE *__restrict __s)  ;
# 447 "/usr/include/stdio.h" 3


 
extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
				   size_t __n, FILE *__restrict __stream)  ;
# 452 "/usr/include/stdio.h" 3
extern size_t fwrite_unlocked (__const void *__restrict __ptr,
				    size_t __size, size_t __n,
				    FILE *__restrict __stream)  ;
# 455 "/usr/include/stdio.h" 3



 
extern int fseek (FILE *__stream, long int __off, int __whence)  ;
 
extern long int ftell (FILE *__stream)  ;
 
extern void rewind (FILE *__stream)  ;

 




 


typedef __off_t off_t;




















 
extern int fgetpos (FILE *__restrict __stream,
			 fpos_t *__restrict __pos)  ;
# 497 "/usr/include/stdio.h" 3
 
extern int fsetpos (FILE *__stream, __const fpos_t *__pos)  ;
# 519 "/usr/include/stdio.h" 3


# 529 "/usr/include/stdio.h" 3


 
extern void clearerr (FILE *__stream)  ;
 
extern int feof (FILE *__stream)  ;
 
extern int ferror (FILE *__stream)  ;


 
extern void clearerr_unlocked (FILE *__stream)  ;
extern int feof_unlocked (FILE *__stream)  ;
extern int ferror_unlocked (FILE *__stream)  ;



 
extern void perror (__const char *__s)  ;

 


extern int sys_nerr;
extern __const char *__const sys_errlist[];








 
extern int fileno (FILE *__stream)  ;



 
extern int fileno_unlocked (FILE *__stream)  ;





 
extern FILE *popen (__const char *__command, __const char *__modes)  ;

 
extern int pclose (FILE *__stream)  ;




 
extern char *ctermid (char *__s)  ;









# 603 "/usr/include/stdio.h" 3




 

 
extern void flockfile (FILE *__stream)  ;

 

extern int ftrylockfile (FILE *__stream)  ;

 
extern void funlockfile (FILE *__stream)  ;










 





 




# 1 "out.c" 2

int main(void)
{
  struct { char x; undefined type y; } v;





  d=((unsigned char *) &v.y)-((unsigned char *) &v.x);





}

the hadrware is linux 2.2.9 on a P II/350. A kernel patch not 100%
compatible with the kernel source prevents me obtaining a core dump.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]