This is the mail archive of the gcc@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]
Other format: [Raw text]

merge_pointed_to_info


Something looks wrong in merge_pointed_to_info.

static void
merge_pointed_to_info (struct alias_info *ai, tree dest, tree orig)
{
  struct ptr_info_def *dest_pi, *orig_pi;

  /* Make sure we have points-to information for ORIG.  */
  collect_points_to_info_for (ai, orig);

  dest_pi = get_ptr_info (dest);
  orig_pi = SSA_NAME_PTR_INFO (orig);

At this point is it an error for dest_pi == orig_pi ? The later code
looks like it will break if they are.

dest_pi->pt_malloc = 0;

      if (orig_pi->pt_malloc || orig_pi->pt_anything)
	set_pt_anything (dest);

However, the attached file contains such an instance, when compiled for
i686-pc-linux-gnu at -O2.  My suspicion was aroused when bitmap_ior_into
was called with the same bitmap.

nathan
--
Nathan Sidwell    ::   http://www.codesourcery.com   ::     CodeSourcery LLC
nathan@codesourcery.com    ::     http://www.planetfall.pwp.blueyonder.co.uk

# 1 "../../gcc/gcc/gengtype.c"
# 1 "/home/nathan/egcs/HEAD/i686-pc-linux-gnu/gcc//"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "../../gcc/gcc/gengtype.c"
# 21 "../../gcc/gcc/gengtype.c"
# 1 "./bconfig.h" 1


# 1 "./auto-host.h" 1
# 4 "./bconfig.h" 2

# 1 "../../gcc/gcc/../include/ansidecl.h" 1
# 6 "./bconfig.h" 2
# 22 "../../gcc/gcc/gengtype.c" 2
# 1 "../../gcc/gcc/system.h" 1
# 28 "../../gcc/gcc/system.h"
# 1 "./include/stdarg.h" 1 3 4
# 43 "./include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 105 "./include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 29 "../../gcc/gcc/system.h" 2
# 39 "../../gcc/gcc/system.h"
# 1 "./include/stddef.h" 1 3 4
# 152 "./include/stddef.h" 3 4
typedef int ptrdiff_t;
# 214 "./include/stddef.h" 3 4
typedef unsigned int size_t;
# 326 "./include/stddef.h" 3 4
typedef long int wchar_t;
# 40 "../../gcc/gcc/system.h" 2


# 1 "/usr/include/stdio.h" 1 3 4
# 28 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 291 "/usr/include/features.h" 3 4
# 1 "/usr/include/sys/cdefs.h" 1 3 4
# 292 "/usr/include/features.h" 2 3 4
# 314 "/usr/include/features.h" 3 4
# 1 "/usr/include/gnu/stubs.h" 1 3 4
# 315 "/usr/include/features.h" 2 3 4
# 29 "/usr/include/stdio.h" 2 3 4





# 1 "./include/stddef.h" 1 3 4
# 35 "/usr/include/stdio.h" 2 3 4

# 1 "/usr/include/bits/types.h" 1 3 4
# 28 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 29 "/usr/include/bits/types.h" 2 3 4


# 1 "./include/stddef.h" 1 3 4
# 32 "/usr/include/bits/types.h" 2 3 4


typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;


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;





__extension__ typedef long long int __quad_t;
__extension__ typedef unsigned long long int __u_quad_t;
# 128 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/typesizes.h" 1 3 4
# 129 "/usr/include/bits/types.h" 2 3 4


typedef unsigned long long int __dev_t;
typedef unsigned int __uid_t;
typedef unsigned int __gid_t;
typedef unsigned long int __ino_t;
typedef unsigned long long int __ino64_t;
typedef unsigned int __mode_t;
typedef unsigned int __nlink_t;
typedef long int __off_t;
typedef long long int __off64_t;
typedef int __pid_t;
typedef struct { int __val[2]; } __fsid_t;
typedef long int __clock_t;
typedef unsigned long int __rlim_t;
typedef unsigned long long int __rlim64_t;
typedef unsigned int __id_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;

typedef int __daddr_t;
typedef long int __swblk_t;
typedef int __key_t;


typedef int __clockid_t;


typedef int __timer_t;


typedef long int __blksize_t;




typedef long int __blkcnt_t;
typedef long long int __blkcnt64_t;


typedef unsigned long int __fsblkcnt_t;
typedef unsigned long long int __fsblkcnt64_t;


typedef unsigned long int __fsfilcnt_t;
typedef unsigned long long int __fsfilcnt64_t;




typedef int __ssize_t;
typedef __off64_t __loff_t;
typedef __quad_t *__qaddr_t;
typedef char *__caddr_t;


typedef int __intptr_t;


typedef unsigned int __socklen_t;
# 37 "/usr/include/stdio.h" 2 3 4









typedef struct _IO_FILE FILE;





# 62 "/usr/include/stdio.h" 3 4
typedef struct _IO_FILE __FILE;
# 72 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/libio.h" 1 3 4
# 32 "/usr/include/libio.h" 3 4
# 1 "/usr/include/_G_config.h" 1 3 4
# 14 "/usr/include/_G_config.h" 3 4
# 1 "./include/stddef.h" 1 3 4
# 355 "./include/stddef.h" 3 4
typedef unsigned int wint_t;
# 15 "/usr/include/_G_config.h" 2 3 4
# 24 "/usr/include/_G_config.h" 3 4
# 1 "/usr/include/wchar.h" 1 3 4
# 48 "/usr/include/wchar.h" 3 4
# 1 "./include/stddef.h" 1 3 4
# 49 "/usr/include/wchar.h" 2 3 4

# 1 "/usr/include/bits/wchar.h" 1 3 4
# 51 "/usr/include/wchar.h" 2 3 4
# 63 "/usr/include/wchar.h" 3 4








typedef struct
{
  int __count;
  union
  {
    wint_t __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
# 25 "/usr/include/_G_config.h" 2 3 4

typedef struct
{
  __off_t __pos;
  __mbstate_t __state;
} _G_fpos_t;
typedef struct
{
  __off64_t __pos;
  __mbstate_t __state;
} _G_fpos64_t;
# 44 "/usr/include/_G_config.h" 3 4
# 1 "/usr/include/gconv.h" 1 3 4
# 28 "/usr/include/gconv.h" 3 4
# 1 "/usr/include/wchar.h" 1 3 4
# 48 "/usr/include/wchar.h" 3 4
# 1 "./include/stddef.h" 1 3 4
# 49 "/usr/include/wchar.h" 2 3 4
# 63 "/usr/include/wchar.h" 3 4

# 29 "/usr/include/gconv.h" 2 3 4


# 1 "./include/stddef.h" 1 3 4
# 32 "/usr/include/gconv.h" 2 3 4





enum
{
  __GCONV_OK = 0,
  __GCONV_NOCONV,
  __GCONV_NODB,
  __GCONV_NOMEM,

  __GCONV_EMPTY_INPUT,
  __GCONV_FULL_OUTPUT,
  __GCONV_ILLEGAL_INPUT,
  __GCONV_INCOMPLETE_INPUT,

  __GCONV_ILLEGAL_DESCRIPTOR,
  __GCONV_INTERNAL_ERROR
};



enum
{
  __GCONV_IS_LAST = 0x0001,
  __GCONV_IGNORE_ERRORS = 0x0002
};



struct __gconv_step;
struct __gconv_step_data;
struct __gconv_loaded_object;
struct __gconv_trans_data;



typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
       __const unsigned char **, __const unsigned char *,
       unsigned char **, size_t *, int, int);


typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);


typedef int (*__gconv_init_fct) (struct __gconv_step *);
typedef void (*__gconv_end_fct) (struct __gconv_step *);



typedef int (*__gconv_trans_fct) (struct __gconv_step *,
      struct __gconv_step_data *, void *,
      __const unsigned char *,
      __const unsigned char **,
      __const unsigned char *, unsigned char **,
      size_t *);


typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
       __const unsigned char *,
       unsigned char *, unsigned char *);


typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
     size_t *);


typedef int (*__gconv_trans_init_fct) (void **, const char *);
typedef void (*__gconv_trans_end_fct) (void *);

struct __gconv_trans_data
{

  __gconv_trans_fct __trans_fct;
  __gconv_trans_context_fct __trans_context_fct;
  __gconv_trans_end_fct __trans_end_fct;
  void *__data;
  struct __gconv_trans_data *__next;
};



struct __gconv_step
{
  struct __gconv_loaded_object *__shlib_handle;
  __const char *__modname;

  int __counter;

  char *__from_name;
  char *__to_name;

  __gconv_fct __fct;
  __gconv_btowc_fct __btowc_fct;
  __gconv_init_fct __init_fct;
  __gconv_end_fct __end_fct;



  int __min_needed_from;
  int __max_needed_from;
  int __min_needed_to;
  int __max_needed_to;


  int __stateful;

  void *__data;
};



struct __gconv_step_data
{
  unsigned char *__outbuf;
  unsigned char *__outbufend;



  int __flags;



  int __invocation_counter;



  int __internal_use;

  __mbstate_t *__statep;
  __mbstate_t __state;



  struct __gconv_trans_data *__trans;
};



typedef struct __gconv_info
{
  size_t __nsteps;
  struct __gconv_step *__steps;
  __extension__ struct __gconv_step_data __data [];
} *__gconv_t;
# 45 "/usr/include/_G_config.h" 2 3 4
typedef union
{
  struct __gconv_info __cd;
  struct
  {
    struct __gconv_info __cd;
    struct __gconv_step_data __data;
  } __combined;
} _G_iconv_t;

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__)));
# 33 "/usr/include/libio.h" 2 3 4
# 162 "/usr/include/libio.h" 3 4
struct _IO_jump_t; struct _IO_FILE;
# 172 "/usr/include/libio.h" 3 4
typedef void _IO_lock_t;





struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;



  int _pos;
# 195 "/usr/include/libio.h" 3 4
};


enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};
# 263 "/usr/include/libio.h" 3 4
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 _flags2;

  __off_t _old_offset;



  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];



  _IO_lock_t *_lock;
# 311 "/usr/include/libio.h" 3 4
  __off64_t _offset;





  void *__pad1;
  void *__pad2;

  int _mode;

  char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];

};


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_;
# 350 "/usr/include/libio.h" 3 4
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, __off64_t *__pos, int __w);


typedef int __io_close_fn (void *__cookie);




typedef __io_read_fn cookie_read_function_t;
typedef __io_write_fn cookie_write_function_t;
typedef __io_seek_fn cookie_seek_function_t;
typedef __io_close_fn cookie_close_function_t;


typedef struct
{
  __io_read_fn *read;
  __io_write_fn *write;
  __io_seek_fn *seek;
  __io_close_fn *close;
} _IO_cookie_io_functions_t;
typedef _IO_cookie_io_functions_t cookie_io_functions_t;

struct _IO_cookie_file;


extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
        void *__cookie, _IO_cookie_io_functions_t __fns);







extern int __underflow (_IO_FILE *) ;
extern int __uflow (_IO_FILE *) ;
extern int __overflow (_IO_FILE *, int) ;
extern wint_t __wunderflow (_IO_FILE *) ;
extern wint_t __wuflow (_IO_FILE *) ;
extern wint_t __woverflow (_IO_FILE *, wint_t) ;
# 432 "/usr/include/libio.h" 3 4
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 *) ;
# 462 "/usr/include/libio.h" 3 4
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
   __gnuc_va_list, int *__restrict) ;
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
    __gnuc_va_list) ;
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 *) ;
# 73 "/usr/include/stdio.h" 2 3 4
# 86 "/usr/include/stdio.h" 3 4


typedef _G_fpos_t fpos_t;





typedef _G_fpos64_t fpos64_t;
# 138 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/bits/stdio_lim.h" 1 3 4
# 139 "/usr/include/stdio.h" 2 3 4



extern struct _IO_FILE *stdin;
extern struct _IO_FILE *stdout;
extern struct _IO_FILE *stderr;









extern int remove (__const char *__filename) ;

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






extern FILE *tmpfile (void) ;
# 173 "/usr/include/stdio.h" 3 4
extern char *tmpnam (char *__s) ;



extern FILE *tmpfile64 (void) ;





extern char *tmpnam_r (char *__s) ;
# 195 "/usr/include/stdio.h" 3 4
extern char *tempnam (__const char *__dir, __const char *__pfx)
     __attribute__ ((__malloc__));





extern int fclose (FILE *__stream) ;

extern int fflush (FILE *__stream) ;




extern int fflush_unlocked (FILE *__stream) ;




extern int fcloseall (void) ;






extern FILE *fopen (__const char *__restrict __filename,
      __const char *__restrict __modes) ;

extern FILE *freopen (__const char *__restrict __filename,
        __const char *__restrict __modes,
        FILE *__restrict __stream) ;
# 241 "/usr/include/stdio.h" 3 4


extern FILE *fopen64 (__const char *__restrict __filename,
        __const char *__restrict __modes) ;
extern FILE *freopen64 (__const char *__restrict __filename,
   __const char *__restrict __modes,
   FILE *__restrict __stream) ;




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





extern FILE *fopencookie (void *__restrict __magic_cookie,
     __const char *__restrict __modes,
     _IO_cookie_io_functions_t __io_funcs) ;


extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes) ;




extern FILE *open_memstream (char **__restrict __bufloc,
        size_t *__restrict __sizeloc) ;






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



extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
      int __modes, size_t __n) ;





extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
         size_t __size) ;


extern void setlinebuf (FILE *__stream) ;





extern int fprintf (FILE *__restrict __stream,
      __const char *__restrict __format, ...) ;

extern int printf (__const char *__restrict __format, ...) ;

extern int sprintf (char *__restrict __s,
      __const char *__restrict __format, ...) ;


extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
       __gnuc_va_list __arg) ;

extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg)
     ;

extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
       __gnuc_va_list __arg) ;





extern int snprintf (char *__restrict __s, size_t __maxlen,
       __const char *__restrict __format, ...)
     __attribute__ ((__format__ (__printf__, 3, 4)));

extern int vsnprintf (char *__restrict __s, size_t __maxlen,
        __const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 3, 0)));






extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
        __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 2, 0)));
extern int __asprintf (char **__restrict __ptr,
         __const char *__restrict __fmt, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));
extern int asprintf (char **__restrict __ptr,
       __const char *__restrict __fmt, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));


extern int vdprintf (int __fd, __const char *__restrict __fmt,
       __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 2, 0)));
extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));





extern int fscanf (FILE *__restrict __stream,
     __const char *__restrict __format, ...) ;

extern int scanf (__const char *__restrict __format, ...) ;

extern int sscanf (__const char *__restrict __s,
     __const char *__restrict __format, ...) ;





extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
      __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 2, 0)));


extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 1, 0)));


extern int vsscanf (__const char *__restrict __s,
      __const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 2, 0)));






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)
     ;



extern char *gets (char *__s) ;




extern char *fgets_unlocked (char *__restrict __s, int __n,
        FILE *__restrict __stream) ;
# 463 "/usr/include/stdio.h" 3 4
extern __ssize_t __getdelim (char **__restrict __lineptr,
          size_t *__restrict __n, int __delimiter,
          FILE *__restrict __stream) ;
extern __ssize_t getdelim (char **__restrict __lineptr,
        size_t *__restrict __n, int __delimiter,
        FILE *__restrict __stream) ;


extern __ssize_t getline (char **__restrict __lineptr,
       size_t *__restrict __n,
       FILE *__restrict __stream) ;





extern int fputs (__const char *__restrict __s, FILE *__restrict __stream)
     ;


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) ;

extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
        size_t __n, FILE *__restrict __s) ;




extern int fputs_unlocked (__const char *__restrict __s,
      FILE *__restrict __stream) ;




extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
         size_t __n, FILE *__restrict __stream) ;
extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
          size_t __n, FILE *__restrict __stream) ;





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

extern long int ftell (FILE *__stream) ;

extern void rewind (FILE *__stream) ;

# 530 "/usr/include/stdio.h" 3 4
extern int fseeko (FILE *__stream, __off_t __off, int __whence) ;

extern __off_t ftello (FILE *__stream) ;
# 546 "/usr/include/stdio.h" 3 4



extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos)
     ;

extern int fsetpos (FILE *__stream, __const fpos_t *__pos) ;
# 565 "/usr/include/stdio.h" 3 4



extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence) ;
extern __off64_t ftello64 (FILE *__stream) ;
extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos)
     ;
extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos) ;




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) ;






# 1 "/usr/include/bits/sys_errlist.h" 1 3 4
# 27 "/usr/include/bits/sys_errlist.h" 3 4
extern int sys_nerr;
extern __const char *__const sys_errlist[];


extern int _sys_nerr;
extern __const char *__const _sys_errlist[];
# 602 "/usr/include/stdio.h" 2 3 4




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) ;





extern char *cuserid (char *__s) ;




struct obstack;


extern int obstack_printf (struct obstack *__restrict __obstack,
      __const char *__restrict __format, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));
extern int obstack_vprintf (struct obstack *__restrict __obstack,
       __const char *__restrict __format,
       __gnuc_va_list __args)
     __attribute__ ((__format__ (__printf__, 2, 0)));







extern void flockfile (FILE *__stream) ;



extern int ftrylockfile (FILE *__stream) ;


extern void funlockfile (FILE *__stream) ;
# 676 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/bits/stdio.h" 1 3 4
# 33 "/usr/include/bits/stdio.h" 3 4
extern __inline int
vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg)
{
  return vfprintf (stdout, __fmt, __arg);
}


extern __inline int
getchar (void)
{
  return _IO_getc (stdin);
}




extern __inline int
getc_unlocked (FILE *__fp)
{
  return ((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
}


extern __inline int
getchar_unlocked (void)
{
  return ((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
}




extern __inline int
putchar (int __c)
{
  return _IO_putc (__c, stdout);
}




extern __inline int
fputc_unlocked (int __c, FILE *__stream)
{
  return (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}





extern __inline int
putc_unlocked (int __c, FILE *__stream)
{
  return (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}


extern __inline int
putchar_unlocked (int __c)
{
  return (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
}





extern __inline __ssize_t
getline (char **__lineptr, size_t *__n, FILE *__stream)
{
  return __getdelim (__lineptr, __n, '\n', __stream);
}





extern __inline int
feof_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x10) != 0);
}


extern __inline int
ferror_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x20) != 0);
}
# 677 "/usr/include/stdio.h" 2 3 4



# 43 "../../gcc/gcc/system.h" 2
# 107 "../../gcc/gcc/system.h"
# 1 "../../gcc/gcc/../include/safe-ctype.h" 1
# 61 "../../gcc/gcc/../include/safe-ctype.h"
enum {

  _sch_isblank = 0x0001,
  _sch_iscntrl = 0x0002,
  _sch_isdigit = 0x0004,
  _sch_islower = 0x0008,
  _sch_isprint = 0x0010,
  _sch_ispunct = 0x0020,
  _sch_isspace = 0x0040,
  _sch_isupper = 0x0080,
  _sch_isxdigit = 0x0100,


  _sch_isidst = 0x0200,
  _sch_isvsp = 0x0400,
  _sch_isnvsp = 0x0800,


  _sch_isalpha = _sch_isupper|_sch_islower,
  _sch_isalnum = _sch_isalpha|_sch_isdigit,
  _sch_isidnum = _sch_isidst|_sch_isdigit,
  _sch_isgraph = _sch_isalnum|_sch_ispunct,
  _sch_iscppsp = _sch_isvsp|_sch_isnvsp,
  _sch_isbasic = _sch_isprint|_sch_iscppsp

};


extern const unsigned short _sch_istable[256];
# 114 "../../gcc/gcc/../include/safe-ctype.h"
extern const unsigned char _sch_toupper[256];
extern const unsigned char _sch_tolower[256];
# 108 "../../gcc/gcc/system.h" 2

# 1 "/usr/include/sys/types.h" 1 3 4
# 29 "/usr/include/sys/types.h" 3 4






typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;




typedef __loff_t loff_t;



typedef __ino_t ino_t;






typedef __ino64_t ino64_t;




typedef __dev_t dev_t;




typedef __gid_t gid_t;




typedef __mode_t mode_t;




typedef __nlink_t nlink_t;




typedef __uid_t uid_t;





typedef __off_t off_t;






typedef __off64_t off64_t;




typedef __pid_t pid_t;




typedef __id_t id_t;




typedef __ssize_t ssize_t;





typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;





typedef __key_t key_t;
# 133 "/usr/include/sys/types.h" 3 4
# 1 "/usr/include/time.h" 1 3 4
# 58 "/usr/include/time.h" 3 4


typedef __clock_t clock_t;



# 74 "/usr/include/time.h" 3 4


typedef __time_t time_t;



# 92 "/usr/include/time.h" 3 4
typedef __clockid_t clockid_t;
# 104 "/usr/include/time.h" 3 4
typedef __timer_t timer_t;
# 134 "/usr/include/sys/types.h" 2 3 4



typedef __useconds_t useconds_t;



typedef __suseconds_t suseconds_t;





# 1 "./include/stddef.h" 1 3 4
# 148 "/usr/include/sys/types.h" 2 3 4



typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
# 191 "/usr/include/sys/types.h" 3 4
typedef int int8_t __attribute__ ((__mode__ (__QI__)));
typedef int int16_t __attribute__ ((__mode__ (__HI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
typedef int int64_t __attribute__ ((__mode__ (__DI__)));


typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));

typedef int register_t __attribute__ ((__mode__ (__word__)));
# 213 "/usr/include/sys/types.h" 3 4
# 1 "/usr/include/endian.h" 1 3 4
# 37 "/usr/include/endian.h" 3 4
# 1 "/usr/include/bits/endian.h" 1 3 4
# 38 "/usr/include/endian.h" 2 3 4
# 214 "/usr/include/sys/types.h" 2 3 4


# 1 "/usr/include/sys/select.h" 1 3 4
# 31 "/usr/include/sys/select.h" 3 4
# 1 "/usr/include/bits/select.h" 1 3 4
# 32 "/usr/include/sys/select.h" 2 3 4


# 1 "/usr/include/bits/sigset.h" 1 3 4
# 23 "/usr/include/bits/sigset.h" 3 4
typedef int __sig_atomic_t;




typedef struct
  {
    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
  } __sigset_t;
# 35 "/usr/include/sys/select.h" 2 3 4



typedef __sigset_t sigset_t;





# 1 "/usr/include/time.h" 1 3 4
# 118 "/usr/include/time.h" 3 4
struct timespec
  {
    __time_t tv_sec;
    long int tv_nsec;
  };
# 45 "/usr/include/sys/select.h" 2 3 4

# 1 "/usr/include/bits/time.h" 1 3 4
# 69 "/usr/include/bits/time.h" 3 4
struct timeval
  {
    __time_t tv_sec;
    __suseconds_t tv_usec;
  };
# 47 "/usr/include/sys/select.h" 2 3 4
# 55 "/usr/include/sys/select.h" 3 4
typedef long int __fd_mask;
# 67 "/usr/include/sys/select.h" 3 4
typedef struct
  {



    __fd_mask fds_bits[1024 / (8 * sizeof (__fd_mask))];





  } fd_set;






typedef __fd_mask fd_mask;
# 99 "/usr/include/sys/select.h" 3 4







extern int select (int __nfds, fd_set *__restrict __readfds,
     fd_set *__restrict __writefds,
     fd_set *__restrict __exceptfds,
     struct timeval *__restrict __timeout) ;





extern int pselect (int __nfds, fd_set *__restrict __readfds,
      fd_set *__restrict __writefds,
      fd_set *__restrict __exceptfds,
      const struct timespec *__restrict __timeout,
      const __sigset_t *__restrict __sigmask) ;



# 217 "/usr/include/sys/types.h" 2 3 4


# 1 "/usr/include/sys/sysmacros.h" 1 3 4
# 220 "/usr/include/sys/types.h" 2 3 4




typedef __blksize_t blksize_t;






typedef __blkcnt_t blkcnt_t;



typedef __fsblkcnt_t fsblkcnt_t;



typedef __fsfilcnt_t fsfilcnt_t;
# 258 "/usr/include/sys/types.h" 3 4
typedef __blkcnt64_t blkcnt64_t;
typedef __fsblkcnt64_t fsblkcnt64_t;
typedef __fsfilcnt64_t fsfilcnt64_t;





# 1 "/usr/include/bits/pthreadtypes.h" 1 3 4
# 23 "/usr/include/bits/pthreadtypes.h" 3 4
# 1 "/usr/include/bits/sched.h" 1 3 4
# 83 "/usr/include/bits/sched.h" 3 4
struct __sched_param
  {
    int __sched_priority;
  };
# 24 "/usr/include/bits/pthreadtypes.h" 2 3 4


struct _pthread_fastlock
{
  long int __status;
  int __spinlock;

};



typedef struct _pthread_descr_struct *_pthread_descr;





typedef struct __pthread_attr_s
{
  int __detachstate;
  int __schedpolicy;
  struct __sched_param __schedparam;
  int __inheritsched;
  int __scope;
  size_t __guardsize;
  int __stackaddr_set;
  void *__stackaddr;
  size_t __stacksize;
} pthread_attr_t;





__extension__ typedef long long __pthread_cond_align_t;




typedef struct
{
  struct _pthread_fastlock __c_lock;
  _pthread_descr __c_waiting;
  char __padding[48 - sizeof (struct _pthread_fastlock)
   - sizeof (_pthread_descr) - sizeof (__pthread_cond_align_t)];
  __pthread_cond_align_t __align;
} pthread_cond_t;



typedef struct
{
  int __dummy;
} pthread_condattr_t;


typedef unsigned int pthread_key_t;





typedef struct
{
  int __m_reserved;
  int __m_count;
  _pthread_descr __m_owner;
  int __m_kind;
  struct _pthread_fastlock __m_lock;
} pthread_mutex_t;



typedef struct
{
  int __mutexkind;
} pthread_mutexattr_t;



typedef int pthread_once_t;




typedef struct _pthread_rwlock_t
{
  struct _pthread_fastlock __rw_lock;
  int __rw_readers;
  _pthread_descr __rw_writer;
  _pthread_descr __rw_read_waiting;
  _pthread_descr __rw_write_waiting;
  int __rw_kind;
  int __rw_pshared;
} pthread_rwlock_t;



typedef struct
{
  int __lockkind;
  int __pshared;
} pthread_rwlockattr_t;




typedef volatile int pthread_spinlock_t;


typedef struct {
  struct _pthread_fastlock __ba_lock;
  int __ba_required;
  int __ba_present;
  _pthread_descr __ba_waiting;
} pthread_barrier_t;


typedef struct {
  int __pshared;
} pthread_barrierattr_t;





typedef unsigned long int pthread_t;
# 267 "/usr/include/sys/types.h" 2 3 4



# 110 "../../gcc/gcc/system.h" 2

# 1 "/usr/include/errno.h" 1 3 4
# 32 "/usr/include/errno.h" 3 4




# 1 "/usr/include/bits/errno.h" 1 3 4
# 25 "/usr/include/bits/errno.h" 3 4
# 1 "/usr/include/linux/errno.h" 1 3 4



# 1 "/usr/include/asm/errno.h" 1 3 4
# 5 "/usr/include/linux/errno.h" 2 3 4
# 26 "/usr/include/bits/errno.h" 2 3 4
# 38 "/usr/include/bits/errno.h" 3 4
extern int *__errno_location (void) __attribute__ ((__const__));
# 37 "/usr/include/errno.h" 2 3 4
# 55 "/usr/include/errno.h" 3 4
extern char *program_invocation_name, *program_invocation_short_name;




# 69 "/usr/include/errno.h" 3 4
typedef int error_t;
# 112 "../../gcc/gcc/system.h" 2
# 122 "../../gcc/gcc/system.h"
# 1 "/usr/include/string.h" 1 3 4
# 28 "/usr/include/string.h" 3 4





# 1 "./include/stddef.h" 1 3 4
# 34 "/usr/include/string.h" 2 3 4




extern void *memcpy (void *__restrict __dest,
       __const void *__restrict __src, size_t __n) ;


extern void *memmove (void *__dest, __const void *__src, size_t __n)
     ;






extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
        int __c, size_t __n)
     ;





extern void *memset (void *__s, int __c, size_t __n) ;


extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
     __attribute__ ((__pure__));


extern void *memchr (__const void *__s, int __c, size_t __n)
      __attribute__ ((__pure__));





extern void *rawmemchr (__const void *__s, int __c) __attribute__ ((__pure__));


extern void *memrchr (__const void *__s, int __c, size_t __n)
      __attribute__ ((__pure__));





extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
     ;

extern char *strncpy (char *__restrict __dest,
        __const char *__restrict __src, size_t __n) ;


extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
     ;

extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
        size_t __n) ;


extern int strcmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__pure__));

extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
     __attribute__ ((__pure__));


extern int strcoll (__const char *__s1, __const char *__s2)
     __attribute__ ((__pure__));

extern size_t strxfrm (char *__restrict __dest,
         __const char *__restrict __src, size_t __n) ;






# 1 "/usr/include/xlocale.h" 1 3 4
# 28 "/usr/include/xlocale.h" 3 4
typedef struct __locale_struct
{

  struct locale_data *__locales[13];


  const unsigned short int *__ctype_b;
  const int *__ctype_tolower;
  const int *__ctype_toupper;


  const char *__names[13];
} *__locale_t;
# 115 "/usr/include/string.h" 2 3 4


extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
     __attribute__ ((__pure__));

extern size_t strxfrm_l (char *__dest, __const char *__src, size_t __n,
    __locale_t __l) ;




extern char *strdup (__const char *__s) __attribute__ ((__malloc__));






extern char *strndup (__const char *__string, size_t __n)
     __attribute__ ((__malloc__));
# 160 "/usr/include/string.h" 3 4


extern char *strchr (__const char *__s, int __c) __attribute__ ((__pure__));

extern char *strrchr (__const char *__s, int __c) __attribute__ ((__pure__));





extern char *strchrnul (__const char *__s, int __c) __attribute__ ((__pure__));





extern size_t strcspn (__const char *__s, __const char *__reject)
     __attribute__ ((__pure__));


extern size_t strspn (__const char *__s, __const char *__accept)
     __attribute__ ((__pure__));

extern char *strpbrk (__const char *__s, __const char *__accept)
     __attribute__ ((__pure__));

extern char *strstr (__const char *__haystack, __const char *__needle)
     __attribute__ ((__pure__));



extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
     ;




extern char *__strtok_r (char *__restrict __s,
    __const char *__restrict __delim,
    char **__restrict __save_ptr) ;

extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
         char **__restrict __save_ptr) ;




extern char *strcasestr (__const char *__haystack, __const char *__needle)
     __attribute__ ((__pure__));






extern void *memmem (__const void *__haystack, size_t __haystacklen,
       __const void *__needle, size_t __needlelen)
     __attribute__ ((__pure__));



extern void *__mempcpy (void *__restrict __dest,
   __const void *__restrict __src, size_t __n) ;
extern void *mempcpy (void *__restrict __dest,
        __const void *__restrict __src, size_t __n) ;





extern size_t strlen (__const char *__s) __attribute__ ((__pure__));





extern size_t strnlen (__const char *__string, size_t __maxlen)
     __attribute__ ((__pure__));





extern char *strerror (int __errnum) ;




extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) ;




extern void __bzero (void *__s, size_t __n) ;



extern void bcopy (__const void *__src, void *__dest, size_t __n) ;


extern void bzero (void *__s, size_t __n) ;


extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
     __attribute__ ((__pure__));


extern char *index (__const char *__s, int __c) __attribute__ ((__pure__));


extern char *rindex (__const char *__s, int __c) __attribute__ ((__pure__));



extern int ffs (int __i) __attribute__ ((__const__));




extern int ffsl (long int __l) __attribute__ ((__const__));

__extension__ extern int ffsll (long long int __ll)
     __attribute__ ((__const__));




extern int strcasecmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__pure__));


extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
     __attribute__ ((__pure__));





extern int strcasecmp_l (__const char *__s1, __const char *__s2,
    __locale_t __loc) __attribute__ ((__pure__));

extern int strncasecmp_l (__const char *__s1, __const char *__s2,
     size_t __n, __locale_t __loc)
     __attribute__ ((__pure__));





extern char *strsep (char **__restrict __stringp,
       __const char *__restrict __delim) ;




extern int strverscmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__pure__));


extern char *strsignal (int __sig) ;


extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
     ;
extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
     ;



extern char *__stpncpy (char *__restrict __dest,
   __const char *__restrict __src, size_t __n) ;
extern char *stpncpy (char *__restrict __dest,
        __const char *__restrict __src, size_t __n) ;


extern char *strfry (char *__string) ;


extern void *memfrob (void *__s, size_t __n) ;






extern char *basename (__const char *__filename) ;
# 372 "/usr/include/string.h" 3 4
# 1 "/usr/include/bits/string.h" 1 3 4
# 373 "/usr/include/string.h" 2 3 4


# 1 "/usr/include/bits/string2.h" 1 3 4
# 376 "/usr/include/string.h" 2 3 4




# 123 "../../gcc/gcc/system.h" 2
# 1 "/usr/include/strings.h" 1 3 4
# 124 "../../gcc/gcc/system.h" 2
# 135 "../../gcc/gcc/system.h"
# 1 "/usr/include/stdlib.h" 1 3 4
# 33 "/usr/include/stdlib.h" 3 4
# 1 "./include/stddef.h" 1 3 4
# 34 "/usr/include/stdlib.h" 2 3 4








# 1 "/usr/include/bits/waitflags.h" 1 3 4
# 43 "/usr/include/stdlib.h" 2 3 4
# 1 "/usr/include/bits/waitstatus.h" 1 3 4
# 65 "/usr/include/bits/waitstatus.h" 3 4
union wait
  {
    int w_status;
    struct
      {

 unsigned int __w_termsig:7;
 unsigned int __w_coredump:1;
 unsigned int __w_retcode:8;
 unsigned int:16;







      } __wait_terminated;
    struct
      {

 unsigned int __w_stopval:8;
 unsigned int __w_stopsig:8;
 unsigned int:16;






      } __wait_stopped;
  };
# 44 "/usr/include/stdlib.h" 2 3 4
# 68 "/usr/include/stdlib.h" 3 4
typedef union
  {
    union wait *__uptr;
    int *__iptr;
  } __WAIT_STATUS __attribute__ ((__transparent_union__));
# 93 "/usr/include/stdlib.h" 3 4


typedef struct
  {
    int quot;
    int rem;
  } div_t;



typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;







__extension__ typedef struct
  {
    long long int quot;
    long long int rem;
  } lldiv_t;


# 137 "/usr/include/stdlib.h" 3 4
extern size_t __ctype_get_mb_cur_max (void) ;




extern double atof (__const char *__nptr) __attribute__ ((__pure__));

extern int atoi (__const char *__nptr) __attribute__ ((__pure__));

extern long int atol (__const char *__nptr) __attribute__ ((__pure__));





__extension__ extern long long int atoll (__const char *__nptr)
     __attribute__ ((__pure__));





extern double strtod (__const char *__restrict __nptr,
        char **__restrict __endptr) ;





extern float strtof (__const char *__restrict __nptr,
       char **__restrict __endptr) ;

extern long double strtold (__const char *__restrict __nptr,
       char **__restrict __endptr) ;





extern long int strtol (__const char *__restrict __nptr,
   char **__restrict __endptr, int __base) ;

extern unsigned long int strtoul (__const char *__restrict __nptr,
      char **__restrict __endptr, int __base)
     ;




__extension__
extern long long int strtoq (__const char *__restrict __nptr,
        char **__restrict __endptr, int __base) ;

__extension__
extern unsigned long long int strtouq (__const char *__restrict __nptr,
           char **__restrict __endptr, int __base)
     ;





__extension__
extern long long int strtoll (__const char *__restrict __nptr,
         char **__restrict __endptr, int __base) ;

__extension__
extern unsigned long long int strtoull (__const char *__restrict __nptr,
     char **__restrict __endptr, int __base)
     ;

# 229 "/usr/include/stdlib.h" 3 4
extern long int strtol_l (__const char *__restrict __nptr,
     char **__restrict __endptr, int __base,
     __locale_t __loc) ;

extern unsigned long int strtoul_l (__const char *__restrict __nptr,
        char **__restrict __endptr,
        int __base, __locale_t __loc) ;

__extension__
extern long long int strtoll_l (__const char *__restrict __nptr,
    char **__restrict __endptr, int __base,
    __locale_t __loc) ;

__extension__
extern unsigned long long int strtoull_l (__const char *__restrict __nptr,
       char **__restrict __endptr,
       int __base, __locale_t __loc)
     ;

extern double strtod_l (__const char *__restrict __nptr,
   char **__restrict __endptr, __locale_t __loc)
     ;

extern float strtof_l (__const char *__restrict __nptr,
         char **__restrict __endptr, __locale_t __loc) ;

extern long double strtold_l (__const char *__restrict __nptr,
         char **__restrict __endptr,
         __locale_t __loc) ;






extern double __strtod_internal (__const char *__restrict __nptr,
     char **__restrict __endptr, int __group)
     ;
extern float __strtof_internal (__const char *__restrict __nptr,
    char **__restrict __endptr, int __group)
     ;
extern long double __strtold_internal (__const char *__restrict __nptr,
           char **__restrict __endptr,
           int __group) ;

extern long int __strtol_internal (__const char *__restrict __nptr,
       char **__restrict __endptr,
       int __base, int __group) ;



extern unsigned long int __strtoul_internal (__const char *__restrict __nptr,
          char **__restrict __endptr,
          int __base, int __group) ;




__extension__
extern long long int __strtoll_internal (__const char *__restrict __nptr,
      char **__restrict __endptr,
      int __base, int __group) ;



__extension__
extern unsigned long long int __strtoull_internal (__const char *
         __restrict __nptr,
         char **__restrict __endptr,
         int __base, int __group)
     ;








extern __inline double
strtod (__const char *__restrict __nptr, char **__restrict __endptr)
{
  return __strtod_internal (__nptr, __endptr, 0);
}
extern __inline long int
strtol (__const char *__restrict __nptr, char **__restrict __endptr,
 int __base)
{
  return __strtol_internal (__nptr, __endptr, __base, 0);
}
extern __inline unsigned long int
strtoul (__const char *__restrict __nptr, char **__restrict __endptr,
  int __base)
{
  return __strtoul_internal (__nptr, __endptr, __base, 0);
}




extern __inline float
strtof (__const char *__restrict __nptr, char **__restrict __endptr)
{
  return __strtof_internal (__nptr, __endptr, 0);
}
extern __inline long double
strtold (__const char *__restrict __nptr, char **__restrict __endptr)
{
  return __strtold_internal (__nptr, __endptr, 0);
}




__extension__ extern __inline long long int
strtoq (__const char *__restrict __nptr, char **__restrict __endptr,
 int __base)
{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
strtouq (__const char *__restrict __nptr, char **__restrict __endptr,
  int __base)
{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}




__extension__ extern __inline long long int
strtoll (__const char *__restrict __nptr, char **__restrict __endptr,
  int __base)
{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
strtoull (__const char * __restrict __nptr, char **__restrict __endptr,
   int __base)
{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}




extern __inline double
atof (__const char *__nptr)
{
  return strtod (__nptr, (char **) ((void *)0));
}
extern __inline int
atoi (__const char *__nptr)
{
  return (int) strtol (__nptr, (char **) ((void *)0), 10);
}
extern __inline long int
atol (__const char *__nptr)
{
  return strtol (__nptr, (char **) ((void *)0), 10);
}




__extension__ extern __inline long long int
atoll (__const char *__nptr)
{
  return strtoll (__nptr, (char **) ((void *)0), 10);
}

# 408 "/usr/include/stdlib.h" 3 4
extern char *l64a (long int __n) ;


extern long int a64l (__const char *__s) __attribute__ ((__pure__));
# 423 "/usr/include/stdlib.h" 3 4
extern long int random (void) ;


extern void srandom (unsigned int __seed) ;





extern char *initstate (unsigned int __seed, char *__statebuf,
   size_t __statelen) ;



extern char *setstate (char *__statebuf) ;







struct random_data
  {
    int32_t *fptr;
    int32_t *rptr;
    int32_t *state;
    int rand_type;
    int rand_deg;
    int rand_sep;
    int32_t *end_ptr;
  };

extern int random_r (struct random_data *__restrict __buf,
       int32_t *__restrict __result) ;

extern int srandom_r (unsigned int __seed, struct random_data *__buf) ;

extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
   size_t __statelen,
   struct random_data *__restrict __buf) ;

extern int setstate_r (char *__restrict __statebuf,
         struct random_data *__restrict __buf) ;






extern int rand (void) ;

extern void srand (unsigned int __seed) ;




extern int rand_r (unsigned int *__seed) ;







extern double drand48 (void) ;
extern double erand48 (unsigned short int __xsubi[3]) ;


extern long int lrand48 (void) ;
extern long int nrand48 (unsigned short int __xsubi[3]) ;


extern long int mrand48 (void) ;
extern long int jrand48 (unsigned short int __xsubi[3]) ;


extern void srand48 (long int __seedval) ;
extern unsigned short int *seed48 (unsigned short int __seed16v[3]) ;
extern void lcong48 (unsigned short int __param[7]) ;





struct drand48_data
  {
    unsigned short int __x[3];
    unsigned short int __old_x[3];
    unsigned short int __c;
    unsigned short int __init;
    unsigned long long int __a;
  };


extern int drand48_r (struct drand48_data *__restrict __buffer,
        double *__restrict __result) ;
extern int erand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        double *__restrict __result) ;


extern int lrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result) ;
extern int nrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result) ;


extern int mrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result) ;
extern int jrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result) ;


extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
     ;

extern int seed48_r (unsigned short int __seed16v[3],
       struct drand48_data *__buffer) ;

extern int lcong48_r (unsigned short int __param[7],
        struct drand48_data *__buffer) ;









extern void *malloc (size_t __size) __attribute__ ((__malloc__));

extern void *calloc (size_t __nmemb, size_t __size)
     __attribute__ ((__malloc__));







extern void *realloc (void *__ptr, size_t __size) __attribute__ ((__malloc__));

extern void free (void *__ptr) ;




extern void cfree (void *__ptr) ;



# 1 "/usr/include/alloca.h" 1 3 4
# 25 "/usr/include/alloca.h" 3 4
# 1 "./include/stddef.h" 1 3 4
# 26 "/usr/include/alloca.h" 2 3 4







extern void *alloca (size_t __size) ;






# 579 "/usr/include/stdlib.h" 2 3 4




extern void *valloc (size_t __size) __attribute__ ((__malloc__));




extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
     __attribute__ ((__malloc__));




extern void abort (void) __attribute__ ((__noreturn__));



extern int atexit (void (*__func) (void)) ;





extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
     ;






extern void exit (int __status) __attribute__ ((__noreturn__));






extern void _Exit (int __status) __attribute__ ((__noreturn__));






extern char *getenv (__const char *__name) ;




extern char *__secure_getenv (__const char *__name) ;





extern int putenv (char *__string) ;





extern int setenv (__const char *__name, __const char *__value, int __replace)
     ;


extern int unsetenv (__const char *__name) ;






extern int clearenv (void) ;
# 663 "/usr/include/stdlib.h" 3 4
extern char *mktemp (char *__template) ;







extern int mkstemp (char *__template) ;
# 680 "/usr/include/stdlib.h" 3 4
extern int mkstemp64 (char *__template) ;
# 690 "/usr/include/stdlib.h" 3 4
extern char *mkdtemp (char *__template) ;





extern int system (__const char *__command) ;







extern char *canonicalize_file_name (__const char *__name) ;
# 714 "/usr/include/stdlib.h" 3 4
extern char *realpath (__const char *__restrict __name,
         char *__restrict __resolved) ;






typedef int (*__compar_fn_t) (__const void *, __const void *);


typedef __compar_fn_t comparison_fn_t;






extern void *bsearch (__const void *__key, __const void *__base,
        size_t __nmemb, size_t __size, __compar_fn_t __compar);



extern void qsort (void *__base, size_t __nmemb, size_t __size,
     __compar_fn_t __compar);



extern int abs (int __x) __attribute__ ((__const__));
extern long int labs (long int __x) __attribute__ ((__const__));



__extension__ extern long long int llabs (long long int __x)
     __attribute__ ((__const__));







extern div_t div (int __numer, int __denom)
     __attribute__ ((__const__));
extern ldiv_t ldiv (long int __numer, long int __denom)
     __attribute__ ((__const__));




__extension__ extern lldiv_t lldiv (long long int __numer,
        long long int __denom)
     __attribute__ ((__const__));

# 778 "/usr/include/stdlib.h" 3 4
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) ;




extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) ;




extern char *gcvt (double __value, int __ndigit, char *__buf) ;




extern char *qecvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign) ;
extern char *qfcvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign) ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf) ;




extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) ;
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) ;

extern int qecvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len) ;
extern int qfcvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len) ;







extern int mblen (__const char *__s, size_t __n) ;


extern int mbtowc (wchar_t *__restrict __pwc,
     __const char *__restrict __s, size_t __n) ;


extern int wctomb (char *__s, wchar_t __wchar) ;



extern size_t mbstowcs (wchar_t *__restrict __pwcs,
   __const char *__restrict __s, size_t __n) ;

extern size_t wcstombs (char *__restrict __s,
   __const wchar_t *__restrict __pwcs, size_t __n)
     ;








extern int rpmatch (__const char *__response) ;
# 860 "/usr/include/stdlib.h" 3 4
extern int getsubopt (char **__restrict __optionp,
        char *__const *__restrict __tokens,
        char **__restrict __valuep) ;





extern void setkey (__const char *__key) ;







extern int posix_openpt (int __oflag) ;







extern int grantpt (int __fd) ;



extern int unlockpt (int __fd) ;




extern char *ptsname (int __fd) ;






extern int ptsname_r (int __fd, char *__buf, size_t __buflen) ;


extern int getpt (void) ;






extern int getloadavg (double __loadavg[], int __nelem) ;






# 136 "../../gcc/gcc/system.h" 2
# 158 "../../gcc/gcc/system.h"
# 1 "/usr/include/unistd.h" 1 3 4
# 28 "/usr/include/unistd.h" 3 4

# 175 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/bits/posix_opt.h" 1 3 4
# 176 "/usr/include/unistd.h" 2 3 4



# 1 "/usr/include/bits/environments.h" 1 3 4
# 23 "/usr/include/bits/environments.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 24 "/usr/include/bits/environments.h" 2 3 4
# 180 "/usr/include/unistd.h" 2 3 4
# 199 "/usr/include/unistd.h" 3 4
# 1 "./include/stddef.h" 1 3 4
# 200 "/usr/include/unistd.h" 2 3 4
# 240 "/usr/include/unistd.h" 3 4
typedef __intptr_t intptr_t;






typedef __socklen_t socklen_t;
# 260 "/usr/include/unistd.h" 3 4
extern int access (__const char *__name, int __type) ;




extern int euidaccess (__const char *__name, int __type) ;
# 290 "/usr/include/unistd.h" 3 4
extern __off_t lseek (int __fd, __off_t __offset, int __whence) ;
# 302 "/usr/include/unistd.h" 3 4
extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) ;



extern int close (int __fd) ;



extern ssize_t read (int __fd, void *__buf, size_t __nbytes) ;


extern ssize_t write (int __fd, __const void *__buf, size_t __n) ;



extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)
     ;
extern ssize_t pwrite (int __fd, __const void *__buf, size_t __n,
         __off_t __offset) ;
# 340 "/usr/include/unistd.h" 3 4
extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
   __off64_t __offset) ;


extern ssize_t pwrite64 (int __fd, __const void *__buf, size_t __n,
    __off64_t __offset) ;







extern int pipe (int __pipedes[2]) ;
# 362 "/usr/include/unistd.h" 3 4
extern unsigned int alarm (unsigned int __seconds) ;
# 371 "/usr/include/unistd.h" 3 4
extern unsigned int sleep (unsigned int __seconds) ;






extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
     ;



extern int usleep (__useconds_t __useconds) ;





extern int pause (void) ;



extern int chown (__const char *__file, __uid_t __owner, __gid_t __group)
     ;



extern int fchown (int __fd, __uid_t __owner, __gid_t __group) ;




extern int lchown (__const char *__file, __uid_t __owner, __gid_t __group)
     ;




extern int chdir (__const char *__path) ;



extern int fchdir (int __fd) ;
# 423 "/usr/include/unistd.h" 3 4
extern char *getcwd (char *__buf, size_t __size) ;





extern char *get_current_dir_name (void) ;






extern char *getwd (char *__buf) ;




extern int dup (int __fd) ;


extern int dup2 (int __fd, int __fd2) ;


extern char **__environ;

extern char **environ;





extern int execve (__const char *__path, char *__const __argv[],
     char *__const __envp[]) ;




extern int fexecve (int __fd, char *__const __argv[], char *__const __envp[])
     ;




extern int execv (__const char *__path, char *__const __argv[]) ;



extern int execle (__const char *__path, __const char *__arg, ...) ;



extern int execl (__const char *__path, __const char *__arg, ...) ;



extern int execvp (__const char *__file, char *__const __argv[]) ;




extern int execlp (__const char *__file, __const char *__arg, ...) ;




extern int nice (int __inc) ;




extern void _exit (int __status) __attribute__ ((__noreturn__));





# 1 "/usr/include/bits/confname.h" 1 3 4
# 25 "/usr/include/bits/confname.h" 3 4
enum
  {
    _PC_LINK_MAX,

    _PC_MAX_CANON,

    _PC_MAX_INPUT,

    _PC_NAME_MAX,

    _PC_PATH_MAX,

    _PC_PIPE_BUF,

    _PC_CHOWN_RESTRICTED,

    _PC_NO_TRUNC,

    _PC_VDISABLE,

    _PC_SYNC_IO,

    _PC_ASYNC_IO,

    _PC_PRIO_IO,

    _PC_SOCK_MAXBUF,

    _PC_FILESIZEBITS,

    _PC_REC_INCR_XFER_SIZE,

    _PC_REC_MAX_XFER_SIZE,

    _PC_REC_MIN_XFER_SIZE,

    _PC_REC_XFER_ALIGN,

    _PC_ALLOC_SIZE_MIN,

    _PC_SYMLINK_MAX

  };


enum
  {
    _SC_ARG_MAX,

    _SC_CHILD_MAX,

    _SC_CLK_TCK,

    _SC_NGROUPS_MAX,

    _SC_OPEN_MAX,

    _SC_STREAM_MAX,

    _SC_TZNAME_MAX,

    _SC_JOB_CONTROL,

    _SC_SAVED_IDS,

    _SC_REALTIME_SIGNALS,

    _SC_PRIORITY_SCHEDULING,

    _SC_TIMERS,

    _SC_ASYNCHRONOUS_IO,

    _SC_PRIORITIZED_IO,

    _SC_SYNCHRONIZED_IO,

    _SC_FSYNC,

    _SC_MAPPED_FILES,

    _SC_MEMLOCK,

    _SC_MEMLOCK_RANGE,

    _SC_MEMORY_PROTECTION,

    _SC_MESSAGE_PASSING,

    _SC_SEMAPHORES,

    _SC_SHARED_MEMORY_OBJECTS,

    _SC_AIO_LISTIO_MAX,

    _SC_AIO_MAX,

    _SC_AIO_PRIO_DELTA_MAX,

    _SC_DELAYTIMER_MAX,

    _SC_MQ_OPEN_MAX,

    _SC_MQ_PRIO_MAX,

    _SC_VERSION,

    _SC_PAGESIZE,


    _SC_RTSIG_MAX,

    _SC_SEM_NSEMS_MAX,

    _SC_SEM_VALUE_MAX,

    _SC_SIGQUEUE_MAX,

    _SC_TIMER_MAX,




    _SC_BC_BASE_MAX,

    _SC_BC_DIM_MAX,

    _SC_BC_SCALE_MAX,

    _SC_BC_STRING_MAX,

    _SC_COLL_WEIGHTS_MAX,

    _SC_EQUIV_CLASS_MAX,

    _SC_EXPR_NEST_MAX,

    _SC_LINE_MAX,

    _SC_RE_DUP_MAX,

    _SC_CHARCLASS_NAME_MAX,


    _SC_2_VERSION,

    _SC_2_C_BIND,

    _SC_2_C_DEV,

    _SC_2_FORT_DEV,

    _SC_2_FORT_RUN,

    _SC_2_SW_DEV,

    _SC_2_LOCALEDEF,


    _SC_PII,

    _SC_PII_XTI,

    _SC_PII_SOCKET,

    _SC_PII_INTERNET,

    _SC_PII_OSI,

    _SC_POLL,

    _SC_SELECT,

    _SC_UIO_MAXIOV,

    _SC_IOV_MAX = _SC_UIO_MAXIOV,

    _SC_PII_INTERNET_STREAM,

    _SC_PII_INTERNET_DGRAM,

    _SC_PII_OSI_COTS,

    _SC_PII_OSI_CLTS,

    _SC_PII_OSI_M,

    _SC_T_IOV_MAX,



    _SC_THREADS,

    _SC_THREAD_SAFE_FUNCTIONS,

    _SC_GETGR_R_SIZE_MAX,

    _SC_GETPW_R_SIZE_MAX,

    _SC_LOGIN_NAME_MAX,

    _SC_TTY_NAME_MAX,

    _SC_THREAD_DESTRUCTOR_ITERATIONS,

    _SC_THREAD_KEYS_MAX,

    _SC_THREAD_STACK_MIN,

    _SC_THREAD_THREADS_MAX,

    _SC_THREAD_ATTR_STACKADDR,

    _SC_THREAD_ATTR_STACKSIZE,

    _SC_THREAD_PRIORITY_SCHEDULING,

    _SC_THREAD_PRIO_INHERIT,

    _SC_THREAD_PRIO_PROTECT,

    _SC_THREAD_PROCESS_SHARED,


    _SC_NPROCESSORS_CONF,

    _SC_NPROCESSORS_ONLN,

    _SC_PHYS_PAGES,

    _SC_AVPHYS_PAGES,

    _SC_ATEXIT_MAX,

    _SC_PASS_MAX,


    _SC_XOPEN_VERSION,

    _SC_XOPEN_XCU_VERSION,

    _SC_XOPEN_UNIX,

    _SC_XOPEN_CRYPT,

    _SC_XOPEN_ENH_I18N,

    _SC_XOPEN_SHM,


    _SC_2_CHAR_TERM,

    _SC_2_C_VERSION,

    _SC_2_UPE,


    _SC_XOPEN_XPG2,

    _SC_XOPEN_XPG3,

    _SC_XOPEN_XPG4,


    _SC_CHAR_BIT,

    _SC_CHAR_MAX,

    _SC_CHAR_MIN,

    _SC_INT_MAX,

    _SC_INT_MIN,

    _SC_LONG_BIT,

    _SC_WORD_BIT,

    _SC_MB_LEN_MAX,

    _SC_NZERO,

    _SC_SSIZE_MAX,

    _SC_SCHAR_MAX,

    _SC_SCHAR_MIN,

    _SC_SHRT_MAX,

    _SC_SHRT_MIN,

    _SC_UCHAR_MAX,

    _SC_UINT_MAX,

    _SC_ULONG_MAX,

    _SC_USHRT_MAX,


    _SC_NL_ARGMAX,

    _SC_NL_LANGMAX,

    _SC_NL_MSGMAX,

    _SC_NL_NMAX,

    _SC_NL_SETMAX,

    _SC_NL_TEXTMAX,


    _SC_XBS5_ILP32_OFF32,

    _SC_XBS5_ILP32_OFFBIG,

    _SC_XBS5_LP64_OFF64,

    _SC_XBS5_LPBIG_OFFBIG,


    _SC_XOPEN_LEGACY,

    _SC_XOPEN_REALTIME,

    _SC_XOPEN_REALTIME_THREADS,


    _SC_ADVISORY_INFO,

    _SC_BARRIERS,

    _SC_BASE,

    _SC_C_LANG_SUPPORT,

    _SC_C_LANG_SUPPORT_R,

    _SC_CLOCK_SELECTION,

    _SC_CPUTIME,

    _SC_THREAD_CPUTIME,

    _SC_DEVICE_IO,

    _SC_DEVICE_SPECIFIC,

    _SC_DEVICE_SPECIFIC_R,

    _SC_FD_MGMT,

    _SC_FIFO,

    _SC_PIPE,

    _SC_FILE_ATTRIBUTES,

    _SC_FILE_LOCKING,

    _SC_FILE_SYSTEM,

    _SC_MONOTONIC_CLOCK,

    _SC_MULTI_PROCESS,

    _SC_SINGLE_PROCESS,

    _SC_NETWORKING,

    _SC_READER_WRITER_LOCKS,

    _SC_SPIN_LOCKS,

    _SC_REGEXP,

    _SC_REGEX_VERSION,

    _SC_SHELL,

    _SC_SIGNALS,

    _SC_SPAWN,

    _SC_SPORADIC_SERVER,

    _SC_THREAD_SPORADIC_SERVER,

    _SC_SYSTEM_DATABASE,

    _SC_SYSTEM_DATABASE_R,

    _SC_TIMEOUTS,

    _SC_TYPED_MEMORY_OBJECTS,

    _SC_USER_GROUPS,

    _SC_USER_GROUPS_R,

    _SC_2_PBS,

    _SC_2_PBS_ACCOUNTING,

    _SC_2_PBS_LOCATE,

    _SC_2_PBS_MESSAGE,

    _SC_2_PBS_TRACK,

    _SC_SYMLOOP_MAX,

    _SC_STREAMS,

    _SC_2_PBS_CHECKPOINT,


    _SC_V6_ILP32_OFF32,

    _SC_V6_ILP32_OFFBIG,

    _SC_V6_LP64_OFF64,

    _SC_V6_LPBIG_OFFBIG,


    _SC_HOST_NAME_MAX,

    _SC_TRACE,

    _SC_TRACE_EVENT_FILTER,

    _SC_TRACE_INHERIT,

    _SC_TRACE_LOG

  };


enum
  {
    _CS_PATH,


    _CS_V6_WIDTH_RESTRICTED_ENVS,


    _CS_GNU_LIBC_VERSION,

    _CS_GNU_LIBPTHREAD_VERSION,


    _CS_LFS_CFLAGS = 1000,

    _CS_LFS_LDFLAGS,

    _CS_LFS_LIBS,

    _CS_LFS_LINTFLAGS,

    _CS_LFS64_CFLAGS,

    _CS_LFS64_LDFLAGS,

    _CS_LFS64_LIBS,

    _CS_LFS64_LINTFLAGS,


    _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,

    _CS_XBS5_ILP32_OFF32_LDFLAGS,

    _CS_XBS5_ILP32_OFF32_LIBS,

    _CS_XBS5_ILP32_OFF32_LINTFLAGS,

    _CS_XBS5_ILP32_OFFBIG_CFLAGS,

    _CS_XBS5_ILP32_OFFBIG_LDFLAGS,

    _CS_XBS5_ILP32_OFFBIG_LIBS,

    _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,

    _CS_XBS5_LP64_OFF64_CFLAGS,

    _CS_XBS5_LP64_OFF64_LDFLAGS,

    _CS_XBS5_LP64_OFF64_LIBS,

    _CS_XBS5_LP64_OFF64_LINTFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_CFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_LIBS,

    _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,


    _CS_POSIX_V6_ILP32_OFF32_CFLAGS,

    _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,

    _CS_POSIX_V6_ILP32_OFF32_LIBS,

    _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,

    _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,

    _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,

    _CS_POSIX_V6_ILP32_OFFBIG_LIBS,

    _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,

    _CS_POSIX_V6_LP64_OFF64_CFLAGS,

    _CS_POSIX_V6_LP64_OFF64_LDFLAGS,

    _CS_POSIX_V6_LP64_OFF64_LIBS,

    _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,

    _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,

    _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,

    _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,

    _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS

  };
# 501 "/usr/include/unistd.h" 2 3 4


extern long int pathconf (__const char *__path, int __name) ;


extern long int fpathconf (int __fd, int __name) ;


extern long int sysconf (int __name) __attribute__ ((__const__));



extern size_t confstr (int __name, char *__buf, size_t __len) ;




extern __pid_t getpid (void) ;


extern __pid_t getppid (void) ;




extern __pid_t getpgrp (void) ;
# 536 "/usr/include/unistd.h" 3 4
extern __pid_t __getpgid (__pid_t __pid) ;

extern __pid_t getpgid (__pid_t __pid) ;






extern int setpgid (__pid_t __pid, __pid_t __pgid) ;
# 562 "/usr/include/unistd.h" 3 4
extern int setpgrp (void) ;
# 580 "/usr/include/unistd.h" 3 4
extern __pid_t setsid (void) ;



extern __pid_t getsid (__pid_t __pid) ;



extern __uid_t getuid (void) ;


extern __uid_t geteuid (void) ;


extern __gid_t getgid (void) ;


extern __gid_t getegid (void) ;




extern int getgroups (int __size, __gid_t __list[]) ;



extern int group_member (__gid_t __gid) ;






extern int setuid (__uid_t __uid) ;




extern int setreuid (__uid_t __ruid, __uid_t __euid) ;




extern int seteuid (__uid_t __uid) ;






extern int setgid (__gid_t __gid) ;




extern int setregid (__gid_t __rgid, __gid_t __egid) ;




extern int setegid (__gid_t __gid) ;





extern int getresuid (__uid_t *__euid, __uid_t *__ruid, __uid_t *__suid);



extern int getresgid (__gid_t *__egid, __gid_t *__rgid, __gid_t *__sgid);



extern int setresuid (__uid_t __euid, __uid_t __ruid, __uid_t __suid);



extern int setresgid (__gid_t __egid, __gid_t __rgid, __gid_t __sgid);






extern __pid_t fork (void) ;






extern __pid_t vfork (void) ;





extern char *ttyname (int __fd) ;



extern int ttyname_r (int __fd, char *__buf, size_t __buflen) ;



extern int isatty (int __fd) ;





extern int ttyslot (void) ;




extern int link (__const char *__from, __const char *__to) ;



extern int symlink (__const char *__from, __const char *__to) ;




extern int readlink (__const char *__restrict __path, char *__restrict __buf,
       size_t __len) ;



extern int unlink (__const char *__name) ;


extern int rmdir (__const char *__path) ;



extern __pid_t tcgetpgrp (int __fd) ;


extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) ;



extern char *getlogin (void) ;




extern int getlogin_r (char *__name, size_t __name_len) ;




extern int setlogin (__const char *__name) ;
# 744 "/usr/include/unistd.h" 3 4
# 1 "../../gcc/gcc/../include/getopt.h" 1 3 4
# 36 "../../gcc/gcc/../include/getopt.h" 3 4
extern char *optarg;
# 50 "../../gcc/gcc/../include/getopt.h" 3 4
extern int optind;




extern int opterr;



extern int optopt;
# 82 "../../gcc/gcc/../include/getopt.h" 3 4
struct option
{

  const char *name;





  int has_arg;
  int *flag;
  int val;
};
# 113 "../../gcc/gcc/../include/getopt.h" 3 4
extern int getopt (int argc, char *const *argv, const char *shortopts);







extern int getopt_long (int argc, char *const *argv, const char *shortopts,
          const struct option *longopts, int *longind);
extern int getopt_long_only (int argc, char *const *argv,
        const char *shortopts,
               const struct option *longopts, int *longind);


extern int _getopt_internal (int argc, char *const *argv,
        const char *shortopts,
               const struct option *longopts, int *longind,
        int long_only);
# 745 "/usr/include/unistd.h" 2 3 4







extern int gethostname (char *__name, size_t __len) ;






extern int sethostname (__const char *__name, size_t __len) ;



extern int sethostid (long int __id) ;





extern int getdomainname (char *__name, size_t __len) ;
extern int setdomainname (__const char *__name, size_t __len) ;





extern int vhangup (void) ;


extern int revoke (__const char *__file) ;







extern int profil (unsigned short int *__sample_buffer, size_t __size,
     size_t __offset, unsigned int __scale) ;





extern int acct (__const char *__name) ;



extern char *getusershell (void) ;
extern void endusershell (void) ;
extern void setusershell (void) ;





extern int daemon (int __nochdir, int __noclose) ;






extern int chroot (__const char *__path) ;



extern char *getpass (__const char *__prompt) ;





extern int fsync (int __fd) ;






extern long int gethostid (void) ;


extern void sync (void) ;




extern int getpagesize (void) __attribute__ ((__const__));




extern int truncate (__const char *__file, __off_t __length) ;
# 854 "/usr/include/unistd.h" 3 4
extern int truncate64 (__const char *__file, __off64_t __length) ;




extern int ftruncate (int __fd, __off_t __length) ;
# 869 "/usr/include/unistd.h" 3 4
extern int ftruncate64 (int __fd, __off64_t __length) ;





extern int getdtablesize (void) ;
# 884 "/usr/include/unistd.h" 3 4
extern int brk (void *__addr) ;





extern void *sbrk (intptr_t __delta) ;
# 905 "/usr/include/unistd.h" 3 4
extern long int syscall (long int __sysno, ...) ;
# 925 "/usr/include/unistd.h" 3 4
extern int lockf (int __fd, int __cmd, __off_t __len) ;
# 935 "/usr/include/unistd.h" 3 4
extern int lockf64 (int __fd, int __cmd, __off64_t __len) ;
# 956 "/usr/include/unistd.h" 3 4
extern int fdatasync (int __fildes) ;







extern char *crypt (__const char *__key, __const char *__salt) ;



extern void encrypt (char *__block, int __edflag) ;






extern void swab (__const void *__restrict __from, void *__restrict __to,
    ssize_t __n) ;







extern char *ctermid (char *__s) ;
# 1001 "/usr/include/unistd.h" 3 4
extern int pthread_atfork (void (*__prepare) (void),
      void (*__parent) (void),
      void (*__child) (void)) ;



# 159 "../../gcc/gcc/system.h" 2



# 1 "/usr/include/sys/param.h" 1 3 4
# 22 "/usr/include/sys/param.h" 3 4
# 1 "./include/limits.h" 1 3 4
# 11 "./include/limits.h" 3 4
# 1 "./include/syslimits.h" 1 3 4






# 1 "./include/limits.h" 1 3 4
# 122 "./include/limits.h" 3 4
# 1 "/usr/include/limits.h" 1 3 4
# 144 "/usr/include/limits.h" 3 4
# 1 "/usr/include/bits/posix1_lim.h" 1 3 4
# 126 "/usr/include/bits/posix1_lim.h" 3 4
# 1 "/usr/include/bits/local_lim.h" 1 3 4
# 36 "/usr/include/bits/local_lim.h" 3 4
# 1 "/usr/include/linux/limits.h" 1 3 4
# 37 "/usr/include/bits/local_lim.h" 2 3 4
# 127 "/usr/include/bits/posix1_lim.h" 2 3 4
# 145 "/usr/include/limits.h" 2 3 4



# 1 "/usr/include/bits/posix2_lim.h" 1 3 4
# 149 "/usr/include/limits.h" 2 3 4



# 1 "/usr/include/bits/xopen_lim.h" 1 3 4
# 34 "/usr/include/bits/xopen_lim.h" 3 4
# 1 "/usr/include/bits/stdio_lim.h" 1 3 4
# 35 "/usr/include/bits/xopen_lim.h" 2 3 4
# 153 "/usr/include/limits.h" 2 3 4
# 123 "./include/limits.h" 2 3 4
# 8 "./include/syslimits.h" 2 3 4
# 12 "./include/limits.h" 2 3 4
# 23 "/usr/include/sys/param.h" 2 3 4

# 1 "/usr/include/linux/param.h" 1 3 4



# 1 "/usr/include/asm/param.h" 1 3 4
# 5 "/usr/include/linux/param.h" 2 3 4
# 25 "/usr/include/sys/param.h" 2 3 4
# 163 "../../gcc/gcc/system.h" 2





# 1 "./include/limits.h" 1 3 4
# 169 "../../gcc/gcc/system.h" 2



# 1 "../../gcc/gcc/hwint.h" 1
# 173 "../../gcc/gcc/system.h" 2
# 201 "../../gcc/gcc/system.h"
# 1 "/usr/include/sys/time.h" 1 3 4
# 27 "/usr/include/sys/time.h" 3 4
# 1 "/usr/include/time.h" 1 3 4
# 28 "/usr/include/sys/time.h" 2 3 4

# 1 "/usr/include/bits/time.h" 1 3 4
# 30 "/usr/include/sys/time.h" 2 3 4
# 39 "/usr/include/sys/time.h" 3 4

# 57 "/usr/include/sys/time.h" 3 4
struct timezone
  {
    int tz_minuteswest;
    int tz_dsttime;
  };

typedef struct timezone *__restrict __timezone_ptr_t;
# 73 "/usr/include/sys/time.h" 3 4
extern int gettimeofday (struct timeval *__restrict __tv,
    __timezone_ptr_t __tz) ;




extern int settimeofday (__const struct timeval *__tv,
    __const struct timezone *__tz) ;





extern int adjtime (__const struct timeval *__delta,
      struct timeval *__olddelta) ;




enum __itimer_which
  {

    ITIMER_REAL = 0,


    ITIMER_VIRTUAL = 1,



    ITIMER_PROF = 2

  };



struct itimerval
  {

    struct timeval it_interval;

    struct timeval it_value;
  };




typedef enum __itimer_which __itimer_which_t;






extern int getitimer (__itimer_which_t __which,
        struct itimerval *__value) ;




extern int setitimer (__itimer_which_t __which,
        __const struct itimerval *__restrict __new,
        struct itimerval *__restrict __old) ;




extern int utimes (__const char *__file, __const struct timeval __tvp[2])
     ;



extern int lutimes (__const char *__file, __const struct timeval __tvp[2])
     ;


extern int futimes (int fd, __const struct timeval __tvp[2]) ;
# 182 "/usr/include/sys/time.h" 3 4

# 202 "../../gcc/gcc/system.h" 2
# 1 "/usr/include/time.h" 1 3 4
# 30 "/usr/include/time.h" 3 4








# 1 "./include/stddef.h" 1 3 4
# 39 "/usr/include/time.h" 2 3 4



# 1 "/usr/include/bits/time.h" 1 3 4
# 43 "/usr/include/time.h" 2 3 4
# 129 "/usr/include/time.h" 3 4


struct tm
{
  int tm_sec;
  int tm_min;
  int tm_hour;
  int tm_mday;
  int tm_mon;
  int tm_year;
  int tm_wday;
  int tm_yday;
  int tm_isdst;


  long int tm_gmtoff;
  __const char *tm_zone;




};








struct itimerspec
  {
    struct timespec it_interval;
    struct timespec it_value;
  };


struct sigevent;
# 178 "/usr/include/time.h" 3 4



extern clock_t clock (void) ;


extern time_t time (time_t *__timer) ;


extern double difftime (time_t __time1, time_t __time0)
     __attribute__ ((__const__));


extern time_t mktime (struct tm *__tp) ;





extern size_t strftime (char *__restrict __s, size_t __maxsize,
   __const char *__restrict __format,
   __const struct tm *__restrict __tp) ;





extern char *strptime (__const char *__restrict __s,
         __const char *__restrict __fmt, struct tm *__tp)
     ;







extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
     __const char *__restrict __format,
     __const struct tm *__restrict __tp,
     __locale_t __loc) ;

extern char *strptime_l (__const char *__restrict __s,
    __const char *__restrict __fmt, struct tm *__tp,
    __locale_t __loc) ;






extern struct tm *gmtime (__const time_t *__timer) ;



extern struct tm *localtime (__const time_t *__timer) ;





extern struct tm *gmtime_r (__const time_t *__restrict __timer,
       struct tm *__restrict __tp) ;



extern struct tm *localtime_r (__const time_t *__restrict __timer,
          struct tm *__restrict __tp) ;





extern char *asctime (__const struct tm *__tp) ;


extern char *ctime (__const time_t *__timer) ;







extern char *asctime_r (__const struct tm *__restrict __tp,
   char *__restrict __buf) ;


extern char *ctime_r (__const time_t *__restrict __timer,
        char *__restrict __buf) ;




extern char *__tzname[2];
extern int __daylight;
extern long int __timezone;




extern char *tzname[2];



extern void tzset (void) ;



extern int daylight;
extern long int timezone;





extern int stime (__const time_t *__when) ;
# 309 "/usr/include/time.h" 3 4
extern time_t timegm (struct tm *__tp) ;


extern time_t timelocal (struct tm *__tp) ;


extern int dysize (int __year) __attribute__ ((__const__));





extern int nanosleep (__const struct timespec *__requested_time,
        struct timespec *__remaining) ;



extern int clock_getres (clockid_t __clock_id, struct timespec *__res) ;


extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) ;


extern int clock_settime (clockid_t __clock_id, __const struct timespec *__tp)
     ;



extern int clock_nanosleep (clockid_t __clock_id, int __flags,
       __const struct timespec *__req,
       struct timespec *__rem) ;


extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) ;




extern int timer_create (clockid_t __clock_id,
    struct sigevent *__restrict __evp,
    timer_t *__restrict __timerid) ;


extern int timer_delete (timer_t __timerid) ;


extern int timer_settime (timer_t __timerid, int __flags,
     __const struct itimerspec *__restrict __value,
     struct itimerspec *__restrict __ovalue) ;


extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
     ;


extern int timer_getoverrun (timer_t __timerid) ;
# 380 "/usr/include/time.h" 3 4
extern int getdate_err;





extern struct tm *getdate (__const char *__string) ;
# 395 "/usr/include/time.h" 3 4
extern int getdate_r (__const char *__restrict __string,
        struct tm *__restrict __resbufp) ;



# 203 "../../gcc/gcc/system.h" 2
# 214 "../../gcc/gcc/system.h"
# 1 "/usr/include/fcntl.h" 1 3 4
# 29 "/usr/include/fcntl.h" 3 4




# 1 "/usr/include/bits/fcntl.h" 1 3 4
# 136 "/usr/include/bits/fcntl.h" 3 4
struct flock
  {
    short int l_type;
    short int l_whence;

    __off_t l_start;
    __off_t l_len;




    __pid_t l_pid;
  };


struct flock64
  {
    short int l_type;
    short int l_whence;
    __off64_t l_start;
    __off64_t l_len;
    __pid_t l_pid;
  };
# 34 "/usr/include/fcntl.h" 2 3 4



# 1 "/usr/include/sys/stat.h" 1 3 4
# 103 "/usr/include/sys/stat.h" 3 4


# 1 "/usr/include/bits/stat.h" 1 3 4
# 36 "/usr/include/bits/stat.h" 3 4
struct stat
  {
    __dev_t st_dev;
    unsigned short int __pad1;

    __ino_t st_ino;



    __mode_t st_mode;
    __nlink_t st_nlink;
    __uid_t st_uid;
    __gid_t st_gid;
    __dev_t st_rdev;
    unsigned short int __pad2;

    __off_t st_size;



    __blksize_t st_blksize;


    __blkcnt_t st_blocks;
# 70 "/usr/include/bits/stat.h" 3 4
    struct timespec st_atim;
    struct timespec st_mtim;
    struct timespec st_ctim;
# 85 "/usr/include/bits/stat.h" 3 4
    unsigned long int __unused4;
    unsigned long int __unused5;



  };


struct stat64
  {
    __dev_t st_dev;
    unsigned int __pad1;

    __ino_t __st_ino;
    __mode_t st_mode;
    __nlink_t st_nlink;
    __uid_t st_uid;
    __gid_t st_gid;
    __dev_t st_rdev;
    unsigned int __pad2;
    __off64_t st_size;
    __blksize_t st_blksize;

    __blkcnt64_t st_blocks;







    struct timespec st_atim;
    struct timespec st_mtim;
    struct timespec st_ctim;
# 127 "/usr/include/bits/stat.h" 3 4
    __ino64_t st_ino;
  };
# 106 "/usr/include/sys/stat.h" 2 3 4
# 207 "/usr/include/sys/stat.h" 3 4
extern int stat (__const char *__restrict __file,
   struct stat *__restrict __buf) ;



extern int fstat (int __fd, struct stat *__buf) ;
# 226 "/usr/include/sys/stat.h" 3 4
extern int stat64 (__const char *__restrict __file,
     struct stat64 *__restrict __buf) ;
extern int fstat64 (int __fd, struct stat64 *__buf) ;






extern int lstat (__const char *__restrict __file,
    struct stat *__restrict __buf) ;
# 248 "/usr/include/sys/stat.h" 3 4
extern int lstat64 (__const char *__restrict __file,
      struct stat64 *__restrict __buf) ;





extern int chmod (__const char *__file, __mode_t __mode) ;





extern int lchmod (__const char *__file, __mode_t __mode) ;




extern int fchmod (int __fd, __mode_t __mode) ;





extern __mode_t umask (__mode_t __mask) ;




extern __mode_t getumask (void) ;



extern int mkdir (__const char *__path, __mode_t __mode) ;





extern int mknod (__const char *__path, __mode_t __mode, __dev_t __dev)
     ;




extern int mkfifo (__const char *__path, __mode_t __mode) ;
# 319 "/usr/include/sys/stat.h" 3 4
extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf) ;
extern int __xstat (int __ver, __const char *__filename,
      struct stat *__stat_buf) ;
extern int __lxstat (int __ver, __const char *__filename,
       struct stat *__stat_buf) ;
# 343 "/usr/include/sys/stat.h" 3 4
extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
     ;
extern int __xstat64 (int __ver, __const char *__filename,
        struct stat64 *__stat_buf) ;
extern int __lxstat64 (int __ver, __const char *__filename,
         struct stat64 *__stat_buf) ;

extern int __xmknod (int __ver, __const char *__path, __mode_t __mode,
       __dev_t *__dev) ;




extern __inline__ int stat (__const char *__path,
       struct stat *__statbuf)
{
  return __xstat (3, __path, __statbuf);
}


extern __inline__ int lstat (__const char *__path,
        struct stat *__statbuf)
{
  return __lxstat (3, __path, __statbuf);
}


extern __inline__ int fstat (int __fd, struct stat *__statbuf)
{
  return __fxstat (3, __fd, __statbuf);
}


extern __inline__ int mknod (__const char *__path, __mode_t __mode,
        __dev_t __dev)
{
  return __xmknod (1, __path, __mode, &__dev);
}





extern __inline__ int stat64 (__const char *__path,
         struct stat64 *__statbuf)
{
  return __xstat64 (3, __path, __statbuf);
}


extern __inline__ int lstat64 (__const char *__path,
          struct stat64 *__statbuf)
{
  return __lxstat64 (3, __path, __statbuf);
}


extern __inline__ int fstat64 (int __fd, struct stat64 *__statbuf)
{
  return __fxstat64 (3, __fd, __statbuf);
}





# 38 "/usr/include/fcntl.h" 2 3 4
# 60 "/usr/include/fcntl.h" 3 4
extern int fcntl (int __fd, int __cmd, ...) ;





extern int open (__const char *__file, int __oflag, ...) ;
# 76 "/usr/include/fcntl.h" 3 4
extern int open64 (__const char *__file, int __oflag, ...) ;






extern int creat (__const char *__file, __mode_t __mode) ;
# 93 "/usr/include/fcntl.h" 3 4
extern int creat64 (__const char *__file, __mode_t __mode) ;
# 130 "/usr/include/fcntl.h" 3 4
extern int posix_fadvise (int __fd, __off_t __offset, size_t __len,
     int __advise) ;
# 142 "/usr/include/fcntl.h" 3 4
extern int posix_fadvise64 (int __fd, __off64_t __offset, size_t __len,
       int __advise) ;





extern int posix_fallocate (int __fd, __off_t __offset, size_t __len) ;
# 160 "/usr/include/fcntl.h" 3 4
extern int posix_fallocate64 (int __fd, __off64_t __offset, size_t __len)
     ;




# 215 "../../gcc/gcc/system.h" 2
# 252 "../../gcc/gcc/system.h"
# 1 "/usr/include/sys/wait.h" 1 3 4
# 28 "/usr/include/sys/wait.h" 3 4


# 1 "/usr/include/signal.h" 1 3 4
# 31 "/usr/include/signal.h" 3 4


# 1 "/usr/include/bits/sigset.h" 1 3 4
# 103 "/usr/include/bits/sigset.h" 3 4
extern int __sigismember (__const __sigset_t *, int);
extern int __sigaddset (__sigset_t *, int);
extern int __sigdelset (__sigset_t *, int);
# 117 "/usr/include/bits/sigset.h" 3 4
extern __inline int __sigismember (__const __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return (__set->__val[__word] & __mask) ? 1 : 0; }
extern __inline int __sigaddset ( __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return ((__set->__val[__word] |= __mask), 0); }
extern __inline int __sigdelset ( __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return ((__set->__val[__word] &= ~__mask), 0); }
# 34 "/usr/include/signal.h" 2 3 4







typedef __sig_atomic_t sig_atomic_t;

# 58 "/usr/include/signal.h" 3 4
# 1 "/usr/include/bits/signum.h" 1 3 4
# 59 "/usr/include/signal.h" 2 3 4
# 73 "/usr/include/signal.h" 3 4
typedef void (*__sighandler_t) (int);




extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
     ;

extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
     ;







extern __sighandler_t signal (int __sig, __sighandler_t __handler) ;
# 102 "/usr/include/signal.h" 3 4





extern __sighandler_t bsd_signal (int __sig, __sighandler_t __handler) ;






extern int kill (__pid_t __pid, int __sig) ;






extern int killpg (__pid_t __pgrp, int __sig) ;




extern int raise (int __sig) ;




extern __sighandler_t ssignal (int __sig, __sighandler_t __handler) ;
extern int gsignal (int __sig) ;




extern void psignal (int __sig, __const char *__s) ;
# 146 "/usr/include/signal.h" 3 4
extern int __sigpause (int __sig_or_mask, int __is_sig) ;




extern int sigpause (int __mask) ;
# 174 "/usr/include/signal.h" 3 4
extern int sigblock (int __mask) ;


extern int sigsetmask (int __mask) ;


extern int siggetmask (void) ;
# 189 "/usr/include/signal.h" 3 4
typedef __sighandler_t sighandler_t;




typedef __sighandler_t sig_t;
# 205 "/usr/include/signal.h" 3 4
# 1 "/usr/include/bits/siginfo.h" 1 3 4
# 25 "/usr/include/bits/siginfo.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 26 "/usr/include/bits/siginfo.h" 2 3 4







typedef union sigval
  {
    int sival_int;
    void *sival_ptr;
  } sigval_t;
# 51 "/usr/include/bits/siginfo.h" 3 4
typedef struct siginfo
  {
    int si_signo;
    int si_errno;

    int si_code;

    union
      {
 int _pad[((128 / sizeof (int)) - 3)];


 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
   } _kill;


 struct
   {
     unsigned int _timer1;
     unsigned int _timer2;
   } _timer;


 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
     sigval_t si_sigval;
   } _rt;


 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
     int si_status;
     __clock_t si_utime;
     __clock_t si_stime;
   } _sigchld;


 struct
   {
     void *si_addr;
   } _sigfault;


 struct
   {
     long int si_band;
     int si_fd;
   } _sigpoll;
      } _sifields;
  } siginfo_t;
# 128 "/usr/include/bits/siginfo.h" 3 4
enum
{
  SI_ASYNCNL = -6,

  SI_SIGIO,

  SI_ASYNCIO,

  SI_MESGQ,

  SI_TIMER,

  SI_QUEUE,

  SI_USER,

  SI_KERNEL = 0x80

};



enum
{
  ILL_ILLOPC = 1,

  ILL_ILLOPN,

  ILL_ILLADR,

  ILL_ILLTRP,

  ILL_PRVOPC,

  ILL_PRVREG,

  ILL_COPROC,

  ILL_BADSTK

};


enum
{
  FPE_INTDIV = 1,

  FPE_INTOVF,

  FPE_FLTDIV,

  FPE_FLTOVF,

  FPE_FLTUND,

  FPE_FLTRES,

  FPE_FLTINV,

  FPE_FLTSUB

};


enum
{
  SEGV_MAPERR = 1,

  SEGV_ACCERR

};


enum
{
  BUS_ADRALN = 1,

  BUS_ADRERR,

  BUS_OBJERR

};


enum
{
  TRAP_BRKPT = 1,

  TRAP_TRACE

};


enum
{
  CLD_EXITED = 1,

  CLD_KILLED,

  CLD_DUMPED,

  CLD_TRAPPED,

  CLD_STOPPED,

  CLD_CONTINUED

};


enum
{
  POLL_IN = 1,

  POLL_OUT,

  POLL_MSG,

  POLL_ERR,

  POLL_PRI,

  POLL_HUP

};
# 271 "/usr/include/bits/siginfo.h" 3 4
struct __pthread_attr_s;

typedef struct sigevent
  {
    sigval_t sigev_value;
    int sigev_signo;
    int sigev_notify;

    union
      {
 int _pad[((64 / sizeof (int)) - 3)];

 struct
   {
     void (*_function) (sigval_t);
     void *_attribute;
   } _sigev_thread;
      } _sigev_un;
  } sigevent_t;






enum
{
  SIGEV_SIGNAL = 0,

  SIGEV_NONE,

  SIGEV_THREAD

};
# 206 "/usr/include/signal.h" 2 3 4



extern int sigemptyset (sigset_t *__set) ;


extern int sigfillset (sigset_t *__set) ;


extern int sigaddset (sigset_t *__set, int __signo) ;


extern int sigdelset (sigset_t *__set, int __signo) ;


extern int sigismember (__const sigset_t *__set, int __signo) ;



extern int sigisemptyset (__const sigset_t *__set) ;


extern int sigandset (sigset_t *__set, __const sigset_t *__left,
        __const sigset_t *__right) ;


extern int sigorset (sigset_t *__set, __const sigset_t *__left,
       __const sigset_t *__right) ;




# 1 "/usr/include/bits/sigaction.h" 1 3 4
# 25 "/usr/include/bits/sigaction.h" 3 4
struct sigaction
  {


    union
      {

 __sighandler_t sa_handler;

 void (*sa_sigaction) (int, siginfo_t *, void *);
      }
    __sigaction_handler;







    __sigset_t sa_mask;


    int sa_flags;


    void (*sa_restorer) (void);
  };
# 239 "/usr/include/signal.h" 2 3 4


extern int sigprocmask (int __how, __const sigset_t *__restrict __set,
   sigset_t *__restrict __oset) ;



extern int sigsuspend (__const sigset_t *__set) ;


extern int sigaction (int __sig, __const struct sigaction *__restrict __act,
        struct sigaction *__restrict __oact) ;


extern int sigpending (sigset_t *__set) ;



extern int sigwait (__const sigset_t *__restrict __set, int *__restrict __sig)
     ;



extern int sigwaitinfo (__const sigset_t *__restrict __set,
   siginfo_t *__restrict __info) ;



extern int sigtimedwait (__const sigset_t *__restrict __set,
    siginfo_t *__restrict __info,
    __const struct timespec *__restrict __timeout)
     ;



extern int sigqueue (__pid_t __pid, int __sig, __const union sigval __val)
     ;
# 284 "/usr/include/signal.h" 3 4
extern __const char *__const _sys_siglist[64];
extern __const char *__const sys_siglist[64];


struct sigvec
  {
    __sighandler_t sv_handler;
    int sv_mask;

    int sv_flags;

  };
# 308 "/usr/include/signal.h" 3 4
extern int sigvec (int __sig, __const struct sigvec *__vec,
     struct sigvec *__ovec) ;



# 1 "/usr/include/bits/sigcontext.h" 1 3 4
# 28 "/usr/include/bits/sigcontext.h" 3 4
# 1 "/usr/include/asm/sigcontext.h" 1 3 4
# 18 "/usr/include/asm/sigcontext.h" 3 4
struct _fpreg {
 unsigned short significand[4];
 unsigned short exponent;
};

struct _fpxreg {
 unsigned short significand[4];
 unsigned short exponent;
 unsigned short padding[3];
};

struct _xmmreg {
 unsigned long element[4];
};

struct _fpstate {

 unsigned long cw;
 unsigned long sw;
 unsigned long tag;
 unsigned long ipoff;
 unsigned long cssel;
 unsigned long dataoff;
 unsigned long datasel;
 struct _fpreg _st[8];
 unsigned short status;
 unsigned short magic;


 unsigned long _fxsr_env[6];
 unsigned long mxcsr;
 unsigned long reserved;
 struct _fpxreg _fxsr_st[8];
 struct _xmmreg _xmm[8];
 unsigned long padding[56];
};



struct sigcontext {
 unsigned short gs, __gsh;
 unsigned short fs, __fsh;
 unsigned short es, __esh;
 unsigned short ds, __dsh;
 unsigned long edi;
 unsigned long esi;
 unsigned long ebp;
 unsigned long esp;
 unsigned long ebx;
 unsigned long edx;
 unsigned long ecx;
 unsigned long eax;
 unsigned long trapno;
 unsigned long err;
 unsigned long eip;
 unsigned short cs, __csh;
 unsigned long eflags;
 unsigned long esp_at_signal;
 unsigned short ss, __ssh;
 struct _fpstate * fpstate;
 unsigned long oldmask;
 unsigned long cr2;
};
# 29 "/usr/include/bits/sigcontext.h" 2 3 4
# 314 "/usr/include/signal.h" 2 3 4


extern int sigreturn (struct sigcontext *__scp) ;
# 326 "/usr/include/signal.h" 3 4
extern int siginterrupt (int __sig, int __interrupt) ;

# 1 "/usr/include/bits/sigstack.h" 1 3 4
# 26 "/usr/include/bits/sigstack.h" 3 4
struct sigstack
  {
    void *ss_sp;
    int ss_onstack;
  };



enum
{
  SS_ONSTACK = 1,

  SS_DISABLE

};
# 50 "/usr/include/bits/sigstack.h" 3 4
typedef struct sigaltstack
  {
    void *ss_sp;
    int ss_flags;
    size_t ss_size;
  } stack_t;
# 329 "/usr/include/signal.h" 2 3 4


# 1 "/usr/include/sys/ucontext.h" 1 3 4
# 23 "/usr/include/sys/ucontext.h" 3 4
# 1 "/usr/include/signal.h" 1 3 4
# 24 "/usr/include/sys/ucontext.h" 2 3 4



# 1 "/usr/include/bits/sigcontext.h" 1 3 4
# 28 "/usr/include/sys/ucontext.h" 2 3 4



typedef int greg_t;





typedef greg_t gregset_t[19];



enum
{
  REG_GS = 0,

  REG_FS,

  REG_ES,

  REG_DS,

  REG_EDI,

  REG_ESI,

  REG_EBP,

  REG_ESP,

  REG_EBX,

  REG_EDX,

  REG_ECX,

  REG_EAX,

  REG_TRAPNO,

  REG_ERR,

  REG_EIP,

  REG_CS,

  REG_EFL,

  REG_UESP,

  REG_SS

};



struct _libc_fpreg
{
  unsigned short int significand[4];
  unsigned short int exponent;
};

struct _libc_fpstate
{
  unsigned long int cw;
  unsigned long int sw;
  unsigned long int tag;
  unsigned long int ipoff;
  unsigned long int cssel;
  unsigned long int dataoff;
  unsigned long int datasel;
  struct _libc_fpreg _st[8];
  unsigned long int status;
};


typedef struct _libc_fpstate *fpregset_t;


typedef struct
  {
    gregset_t gregs;


    fpregset_t fpregs;
    unsigned long int oldmask;
    unsigned long int cr2;
  } mcontext_t;


typedef struct ucontext
  {
    unsigned long int uc_flags;
    struct ucontext *uc_link;
    stack_t uc_stack;
    mcontext_t uc_mcontext;
    __sigset_t uc_sigmask;
    struct _libc_fpstate __fpregs_mem;
  } ucontext_t;
# 332 "/usr/include/signal.h" 2 3 4





extern int sigstack (struct sigstack *__ss, struct sigstack *__oss) ;



extern int sigaltstack (__const struct sigaltstack *__restrict __ss,
   struct sigaltstack *__restrict __oss) ;







extern int sighold (int __sig) ;


extern int sigrelse (int __sig) ;


extern int sigignore (int __sig) ;


extern __sighandler_t sigset (int __sig, __sighandler_t __disp) ;





# 1 "/usr/include/bits/pthreadtypes.h" 1 3 4
# 366 "/usr/include/signal.h" 2 3 4
# 1 "/usr/include/bits/sigthread.h" 1 3 4
# 31 "/usr/include/bits/sigthread.h" 3 4
extern int pthread_sigmask (int __how,
       __const __sigset_t *__restrict __newmask,
       __sigset_t *__restrict __oldmask);


extern int pthread_kill (pthread_t __threadid, int __signo) ;
# 367 "/usr/include/signal.h" 2 3 4






extern int __libc_current_sigrtmin (void) ;

extern int __libc_current_sigrtmax (void) ;




# 31 "/usr/include/sys/wait.h" 2 3 4
# 1 "/usr/include/sys/resource.h" 1 3 4
# 25 "/usr/include/sys/resource.h" 3 4
# 1 "/usr/include/bits/resource.h" 1 3 4
# 32 "/usr/include/bits/resource.h" 3 4
enum __rlimit_resource
{

  RLIMIT_CPU = 0,



  RLIMIT_FSIZE = 1,



  RLIMIT_DATA = 2,



  RLIMIT_STACK = 3,



  RLIMIT_CORE = 4,






  RLIMIT_RSS = 5,



  RLIMIT_NOFILE = 7,
  RLIMIT_OFILE = RLIMIT_NOFILE,




  RLIMIT_AS = 9,



  RLIMIT_NPROC = 6,



  RLIMIT_MEMLOCK = 8,



  RLIMIT_LOCKS = 10,


  RLIMIT_NLIMITS = 11,
  RLIM_NLIMITS = RLIMIT_NLIMITS


};
# 107 "/usr/include/bits/resource.h" 3 4
typedef __rlim_t rlim_t;




typedef __rlim64_t rlim64_t;


struct rlimit
  {

    rlim_t rlim_cur;

    rlim_t rlim_max;
  };


struct rlimit64
  {

    rlim64_t rlim_cur;

    rlim64_t rlim_max;
 };



enum __rusage_who
{

  RUSAGE_SELF = 0,



  RUSAGE_CHILDREN = -1,



  RUSAGE_BOTH = -2

};


# 1 "/usr/include/bits/time.h" 1 3 4
# 151 "/usr/include/bits/resource.h" 2 3 4


struct rusage
  {

    struct timeval ru_utime;

    struct timeval ru_stime;

    long int ru_maxrss;


    long int ru_ixrss;

    long int ru_idrss;

    long int ru_isrss;


    long int ru_minflt;

    long int ru_majflt;

    long int ru_nswap;


    long int ru_inblock;

    long int ru_oublock;

    long int ru_msgsnd;

    long int ru_msgrcv;

    long int ru_nsignals;



    long int ru_nvcsw;


    long int ru_nivcsw;
  };







enum __priority_which
{
  PRIO_PROCESS = 0,

  PRIO_PGRP = 1,

  PRIO_USER = 2

};
# 26 "/usr/include/sys/resource.h" 2 3 4













typedef enum __rlimit_resource __rlimit_resource_t;
typedef enum __rusage_who __rusage_who_t;
typedef enum __priority_which __priority_which_t;
# 51 "/usr/include/sys/resource.h" 3 4
extern int getrlimit (__rlimit_resource_t __resource,
        struct rlimit *__rlimits) ;
# 63 "/usr/include/sys/resource.h" 3 4
extern int getrlimit64 (__rlimit_resource_t __resource,
   struct rlimit64 *__rlimits) ;






extern int setrlimit (__rlimit_resource_t __resource,
        __const struct rlimit *__rlimits) ;
# 83 "/usr/include/sys/resource.h" 3 4
extern int setrlimit64 (__rlimit_resource_t __resource,
   __const struct rlimit64 *__rlimits) ;




extern int getrusage (__rusage_who_t __who, struct rusage *__usage) ;





extern int getpriority (__priority_which_t __which, id_t __who) ;



extern int setpriority (__priority_which_t __which, id_t __who, int __prio)
     ;


# 32 "/usr/include/sys/wait.h" 2 3 4
# 98 "/usr/include/sys/wait.h" 3 4
typedef enum
{
  P_ALL,
  P_PID,
  P_PGID
} idtype_t;





extern __pid_t wait (__WAIT_STATUS __stat_loc) ;
# 129 "/usr/include/sys/wait.h" 3 4
extern __pid_t waitpid (__pid_t __pid, int *__stat_loc, int __options) ;



# 1 "/usr/include/bits/siginfo.h" 1 3 4
# 25 "/usr/include/bits/siginfo.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 26 "/usr/include/bits/siginfo.h" 2 3 4
# 134 "/usr/include/sys/wait.h" 2 3 4
# 142 "/usr/include/sys/wait.h" 3 4
extern int waitid (idtype_t __idtype, __id_t __id, siginfo_t *__infop,
     int __options) ;





struct rusage;






extern __pid_t wait3 (__WAIT_STATUS __stat_loc, int __options,
        struct rusage * __usage) ;





struct rusage;


extern __pid_t wait4 (__pid_t __pid, __WAIT_STATUS __stat_loc, int __options,
        struct rusage *__usage) ;




# 253 "../../gcc/gcc/system.h" 2
# 303 "../../gcc/gcc/system.h"
extern int getopt (int, char * const *, const char *);
# 323 "../../gcc/gcc/system.h"
# 1 "/usr/include/malloc.h" 1 3 4
# 46 "/usr/include/malloc.h" 3 4
# 1 "./include/stddef.h" 1 3 4
# 47 "/usr/include/malloc.h" 2 3 4
# 110 "/usr/include/malloc.h" 3 4
extern void * malloc (size_t __size) __attribute__ ((__malloc__));


extern void * calloc (size_t __nmemb, size_t __size)
       __attribute__ ((__malloc__));



extern void * realloc (void * __ptr, size_t __size)

       __attribute__ ((__malloc__));


extern void free (void * __ptr) ;


extern void cfree (void * __ptr) ;


extern void * memalign (size_t __alignment, size_t __size) ;


extern void * valloc (size_t __size) __attribute__ ((__malloc__));



extern void * pvalloc (size_t __size)
       __attribute__ ((__malloc__));



extern void * (*__morecore) (ptrdiff_t __size);


extern void * __default_morecore (ptrdiff_t __size)
       __attribute__ ((__malloc__));



struct mallinfo {
  int arena;
  int ordblks;
  int smblks;
  int hblks;
  int hblkhd;
  int usmblks;
  int fsmblks;
  int uordblks;
  int fordblks;
  int keepcost;
};


extern struct mallinfo mallinfo (void) ;
# 187 "/usr/include/malloc.h" 3 4
extern int mallopt (int __param, int __val) ;



extern int malloc_trim (size_t __pad) ;



extern size_t malloc_usable_size (void * __ptr) ;


extern void malloc_stats (void) ;


extern void * malloc_get_state (void) ;



extern int malloc_set_state (void * __ptr) ;




extern void (*__malloc_initialize_hook) (void);

extern void (*__free_hook) (void * __ptr, __const void *);

extern void * (*__malloc_hook) (size_t __size, __const void *);

extern void * (*__realloc_hook) (void * __ptr, size_t __size, __const void *);


extern void * (*__memalign_hook) (size_t __alignment, size_t __size, __const void *);


extern void (*__after_morecore_hook) (void);


extern void __malloc_check_init (void) ;
# 324 "../../gcc/gcc/system.h" 2
# 456 "../../gcc/gcc/system.h"
# 1 "../../gcc/gcc/../include/filenames.h" 1
# 457 "../../gcc/gcc/system.h" 2
# 467 "../../gcc/gcc/system.h"
# 1 "../../gcc/gcc/../include/libiberty.h" 1
# 42 "../../gcc/gcc/../include/libiberty.h"
# 1 "../../gcc/gcc/../include/ansidecl.h" 1
# 43 "../../gcc/gcc/../include/libiberty.h" 2



# 1 "./include/stddef.h" 1 3 4
# 47 "../../gcc/gcc/../include/libiberty.h" 2







extern char **buildargv (const char *) __attribute__ ((__malloc__));



extern void freeargv (char **);




extern char **dupargv (char **) __attribute__ ((__malloc__));
# 86 "../../gcc/gcc/../include/libiberty.h"
extern const char *lbasename (const char *);



extern char *lrealpath (const char *);





extern char *concat (const char *, ...) __attribute__ ((__malloc__)) __attribute__ ((__sentinel__));
# 105 "../../gcc/gcc/../include/libiberty.h"
extern char *reconcat (char *, const char *, ...) __attribute__ ((__malloc__)) __attribute__ ((__sentinel__));





extern unsigned long concat_length (const char *, ...) __attribute__ ((__sentinel__));






extern char *concat_copy (char *, const char *, ...) __attribute__ ((__sentinel__));






extern char *concat_copy2 (const char *, ...) __attribute__ ((__sentinel__));



extern char *libiberty_concat_ptr;
# 141 "../../gcc/gcc/../include/libiberty.h"
extern int fdmatch (int fd1, int fd2);




extern char * getpwd (void);



extern long get_run_time (void);




extern char *make_relative_prefix (const char *, const char *, const char *);




extern char *choose_temp_base (void) __attribute__ ((__malloc__));



extern char *make_temp_file (const char *) __attribute__ ((__malloc__));



extern const char *spaces (int count);




extern int errno_max (void);




extern const char *strerrno (int);



extern int strtoerrno (const char *);



extern char *xstrerror (int);




extern int signo_max (void);
# 203 "../../gcc/gcc/../include/libiberty.h"
extern const char *strsigno (int);



extern int strtosigno (const char *);



extern int xatexit (void (*fn) (void));



extern void xexit (int status) __attribute__ ((__noreturn__));



extern void xmalloc_set_program_name (const char *);


extern void xmalloc_failed (size_t) __attribute__ ((__noreturn__));





extern void * xmalloc (size_t) __attribute__ ((__malloc__));





extern void * xrealloc (void *, size_t);




extern void * xcalloc (size_t, size_t) __attribute__ ((__malloc__));



extern char *xstrdup (const char *) __attribute__ ((__malloc__));



extern void * xmemdup (const void *, size_t, size_t) __attribute__ ((__malloc__));


extern double physmem_total (void);
extern double physmem_available (void);
# 288 "../../gcc/gcc/../include/libiberty.h"
extern const unsigned char _hex_value[256];
extern void hex_init (void);
# 305 "../../gcc/gcc/../include/libiberty.h"
extern int pexecute (const char *, char * const *, const char *, const char *, char **, char **, int);




extern int pwait (int, int *, int);





extern int asprintf (char **, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__nonnull__ (2)));
# 335 "../../gcc/gcc/../include/libiberty.h"
extern void * C_alloca (size_t) __attribute__ ((__malloc__));
# 468 "../../gcc/gcc/system.h" 2
# 505 "../../gcc/gcc/system.h"
extern void fancy_abort (const char *, int, const char *) __attribute__ ((__noreturn__));
# 583 "../../gcc/gcc/system.h"
        




        



        
# 622 "../../gcc/gcc/system.h"
        
# 663 "../../gcc/gcc/system.h"
        
# 679 "../../gcc/gcc/system.h"
        
# 689 "../../gcc/gcc/system.h"
        
# 23 "../../gcc/gcc/gengtype.c" 2
# 1 "../../gcc/gcc/coretypes.h" 1
# 40 "../../gcc/gcc/coretypes.h"
struct rtx_def;
typedef struct rtx_def *rtx;
struct rtvec_def;
typedef struct rtvec_def *rtvec;
union tree_node;
typedef union tree_node *tree;





struct cpp_reader;




enum tls_model {
  TLS_MODEL_GLOBAL_DYNAMIC = 1,
  TLS_MODEL_LOCAL_DYNAMIC,
  TLS_MODEL_INITIAL_EXEC,
  TLS_MODEL_LOCAL_EXEC
};
# 24 "../../gcc/gcc/gengtype.c" 2
# 1 "./tm.h" 1



# 1 "../../gcc/gcc/config/i386/i386.h" 1
# 39 "../../gcc/gcc/config/i386/i386.h"
struct processor_costs {
  const int add;
  const int lea;
  const int shift_var;
  const int shift_const;
  const int mult_init[5];

  const int mult_bit;
  const int divide[5];

  int movsx;
  int movzx;
  const int large_insn;
  const int move_ratio;

  const int movzbl_load;
  const int int_load[3];


  const int int_store[3];

  const int fp_move;
  const int fp_load[3];

  const int fp_store[3];

  const int mmx_move;
  const int mmx_load[2];

  const int mmx_store[2];

  const int sse_move;
  const int sse_load[3];

  const int sse_store[3];

  const int mmxsse_to_integer;

  const int prefetch_block;
  const int simultaneous_prefetches;

  const int branch_cost;
  const int fadd;
  const int fmul;
  const int fdiv;
  const int fabs;
  const int fchs;
  const int fsqrt;
};

extern const struct processor_costs *ix86_cost;



extern int target_flags;
# 228 "../../gcc/gcc/config/i386/i386.h"
extern const int x86_use_leave, x86_push_memory, x86_zero_extend_with_and;
extern const int x86_use_bit_test, x86_cmove, x86_deep_branch;
extern const int x86_branch_hints, x86_unroll_strlen;
extern const int x86_double_with_add, x86_partial_reg_stall, x86_movx;
extern const int x86_use_loop, x86_use_fiop, x86_use_mov0;
extern const int x86_use_cltd, x86_read_modify_write;
extern const int x86_read_modify, x86_split_long_moves;
extern const int x86_promote_QImode, x86_single_stringop, x86_fast_prefix;
extern const int x86_himode_math, x86_qimode_math, x86_promote_qi_regs;
extern const int x86_promote_hi_regs, x86_integer_DFmode_moves;
extern const int x86_add_esp_4, x86_add_esp_8, x86_sub_esp_4, x86_sub_esp_8;
extern const int x86_partial_reg_dependency, x86_memory_mismatch_stall;
extern const int x86_accumulate_outgoing_args, x86_prologue_using_move;
extern const int x86_epilogue_using_move, x86_decompose_lea;
extern const int x86_arch_always_fancy_math_387, x86_shift1;
extern const int x86_sse_partial_reg_dependency, x86_sse_partial_regs;
extern const int x86_sse_typeless_stores, x86_sse_load0_by_pxor;
extern const int x86_use_ffreep, x86_sse_partial_regs_for_cvtsd2ss;
extern const int x86_inter_unit_moves, x86_schedule;
extern int x86_prefetch_sse;
# 1276 "../../gcc/gcc/config/i386/i386.h"
enum reg_class
{
  NO_REGS,
  AREG, DREG, CREG, BREG, SIREG, DIREG,
  AD_REGS,
  Q_REGS,
  NON_Q_REGS,
  INDEX_REGS,
  LEGACY_REGS,
  GENERAL_REGS,
  FP_TOP_REG, FP_SECOND_REG,
  FLOAT_REGS,
  SSE_REGS,
  MMX_REGS,
  FP_TOP_SSE_REGS,
  FP_SECOND_SSE_REGS,
  FLOAT_SSE_REGS,
  FLOAT_INT_REGS,
  INT_SSE_REGS,
  FLOAT_INT_SSE_REGS,
  ALL_REGS, LIM_REG_CLASSES
};
# 1723 "../../gcc/gcc/config/i386/i386.h"
typedef struct ix86_args {
  int words;
  int nregs;
  int regno;
  int fastcall;
  int sse_words;
  int sse_nregs;
  int warn_sse;
  int warn_mmx;
  int sse_regno;
  int mmx_words;
  int mmx_nregs;
  int mmx_regno;
  int maybe_vaarg;
} CUMULATIVE_ARGS;
# 2030 "../../gcc/gcc/config/i386/i386.h"
enum ix86_builtins
{
  IX86_BUILTIN_ADDPS,
  IX86_BUILTIN_ADDSS,
  IX86_BUILTIN_DIVPS,
  IX86_BUILTIN_DIVSS,
  IX86_BUILTIN_MULPS,
  IX86_BUILTIN_MULSS,
  IX86_BUILTIN_SUBPS,
  IX86_BUILTIN_SUBSS,

  IX86_BUILTIN_CMPEQPS,
  IX86_BUILTIN_CMPLTPS,
  IX86_BUILTIN_CMPLEPS,
  IX86_BUILTIN_CMPGTPS,
  IX86_BUILTIN_CMPGEPS,
  IX86_BUILTIN_CMPNEQPS,
  IX86_BUILTIN_CMPNLTPS,
  IX86_BUILTIN_CMPNLEPS,
  IX86_BUILTIN_CMPNGTPS,
  IX86_BUILTIN_CMPNGEPS,
  IX86_BUILTIN_CMPORDPS,
  IX86_BUILTIN_CMPUNORDPS,
  IX86_BUILTIN_CMPNEPS,
  IX86_BUILTIN_CMPEQSS,
  IX86_BUILTIN_CMPLTSS,
  IX86_BUILTIN_CMPLESS,
  IX86_BUILTIN_CMPNEQSS,
  IX86_BUILTIN_CMPNLTSS,
  IX86_BUILTIN_CMPNLESS,
  IX86_BUILTIN_CMPORDSS,
  IX86_BUILTIN_CMPUNORDSS,
  IX86_BUILTIN_CMPNESS,

  IX86_BUILTIN_COMIEQSS,
  IX86_BUILTIN_COMILTSS,
  IX86_BUILTIN_COMILESS,
  IX86_BUILTIN_COMIGTSS,
  IX86_BUILTIN_COMIGESS,
  IX86_BUILTIN_COMINEQSS,
  IX86_BUILTIN_UCOMIEQSS,
  IX86_BUILTIN_UCOMILTSS,
  IX86_BUILTIN_UCOMILESS,
  IX86_BUILTIN_UCOMIGTSS,
  IX86_BUILTIN_UCOMIGESS,
  IX86_BUILTIN_UCOMINEQSS,

  IX86_BUILTIN_CVTPI2PS,
  IX86_BUILTIN_CVTPS2PI,
  IX86_BUILTIN_CVTSI2SS,
  IX86_BUILTIN_CVTSI642SS,
  IX86_BUILTIN_CVTSS2SI,
  IX86_BUILTIN_CVTSS2SI64,
  IX86_BUILTIN_CVTTPS2PI,
  IX86_BUILTIN_CVTTSS2SI,
  IX86_BUILTIN_CVTTSS2SI64,

  IX86_BUILTIN_MAXPS,
  IX86_BUILTIN_MAXSS,
  IX86_BUILTIN_MINPS,
  IX86_BUILTIN_MINSS,

  IX86_BUILTIN_LOADAPS,
  IX86_BUILTIN_LOADUPS,
  IX86_BUILTIN_STOREAPS,
  IX86_BUILTIN_STOREUPS,
  IX86_BUILTIN_LOADSS,
  IX86_BUILTIN_STORESS,
  IX86_BUILTIN_MOVSS,

  IX86_BUILTIN_MOVHLPS,
  IX86_BUILTIN_MOVLHPS,
  IX86_BUILTIN_LOADHPS,
  IX86_BUILTIN_LOADLPS,
  IX86_BUILTIN_STOREHPS,
  IX86_BUILTIN_STORELPS,

  IX86_BUILTIN_MASKMOVQ,
  IX86_BUILTIN_MOVMSKPS,
  IX86_BUILTIN_PMOVMSKB,

  IX86_BUILTIN_MOVNTPS,
  IX86_BUILTIN_MOVNTQ,

  IX86_BUILTIN_LOADDQA,
  IX86_BUILTIN_LOADDQU,
  IX86_BUILTIN_STOREDQA,
  IX86_BUILTIN_STOREDQU,
  IX86_BUILTIN_MOVQ,
  IX86_BUILTIN_LOADD,
  IX86_BUILTIN_STORED,

  IX86_BUILTIN_CLRTI,

  IX86_BUILTIN_PACKSSWB,
  IX86_BUILTIN_PACKSSDW,
  IX86_BUILTIN_PACKUSWB,

  IX86_BUILTIN_PADDB,
  IX86_BUILTIN_PADDW,
  IX86_BUILTIN_PADDD,
  IX86_BUILTIN_PADDQ,
  IX86_BUILTIN_PADDSB,
  IX86_BUILTIN_PADDSW,
  IX86_BUILTIN_PADDUSB,
  IX86_BUILTIN_PADDUSW,
  IX86_BUILTIN_PSUBB,
  IX86_BUILTIN_PSUBW,
  IX86_BUILTIN_PSUBD,
  IX86_BUILTIN_PSUBQ,
  IX86_BUILTIN_PSUBSB,
  IX86_BUILTIN_PSUBSW,
  IX86_BUILTIN_PSUBUSB,
  IX86_BUILTIN_PSUBUSW,

  IX86_BUILTIN_PAND,
  IX86_BUILTIN_PANDN,
  IX86_BUILTIN_POR,
  IX86_BUILTIN_PXOR,

  IX86_BUILTIN_PAVGB,
  IX86_BUILTIN_PAVGW,

  IX86_BUILTIN_PCMPEQB,
  IX86_BUILTIN_PCMPEQW,
  IX86_BUILTIN_PCMPEQD,
  IX86_BUILTIN_PCMPGTB,
  IX86_BUILTIN_PCMPGTW,
  IX86_BUILTIN_PCMPGTD,

  IX86_BUILTIN_PEXTRW,
  IX86_BUILTIN_PINSRW,

  IX86_BUILTIN_PMADDWD,

  IX86_BUILTIN_PMAXSW,
  IX86_BUILTIN_PMAXUB,
  IX86_BUILTIN_PMINSW,
  IX86_BUILTIN_PMINUB,

  IX86_BUILTIN_PMULHUW,
  IX86_BUILTIN_PMULHW,
  IX86_BUILTIN_PMULLW,

  IX86_BUILTIN_PSADBW,
  IX86_BUILTIN_PSHUFW,

  IX86_BUILTIN_PSLLW,
  IX86_BUILTIN_PSLLD,
  IX86_BUILTIN_PSLLQ,
  IX86_BUILTIN_PSRAW,
  IX86_BUILTIN_PSRAD,
  IX86_BUILTIN_PSRLW,
  IX86_BUILTIN_PSRLD,
  IX86_BUILTIN_PSRLQ,
  IX86_BUILTIN_PSLLWI,
  IX86_BUILTIN_PSLLDI,
  IX86_BUILTIN_PSLLQI,
  IX86_BUILTIN_PSRAWI,
  IX86_BUILTIN_PSRADI,
  IX86_BUILTIN_PSRLWI,
  IX86_BUILTIN_PSRLDI,
  IX86_BUILTIN_PSRLQI,

  IX86_BUILTIN_PUNPCKHBW,
  IX86_BUILTIN_PUNPCKHWD,
  IX86_BUILTIN_PUNPCKHDQ,
  IX86_BUILTIN_PUNPCKLBW,
  IX86_BUILTIN_PUNPCKLWD,
  IX86_BUILTIN_PUNPCKLDQ,

  IX86_BUILTIN_SHUFPS,

  IX86_BUILTIN_RCPPS,
  IX86_BUILTIN_RCPSS,
  IX86_BUILTIN_RSQRTPS,
  IX86_BUILTIN_RSQRTSS,
  IX86_BUILTIN_SQRTPS,
  IX86_BUILTIN_SQRTSS,

  IX86_BUILTIN_UNPCKHPS,
  IX86_BUILTIN_UNPCKLPS,

  IX86_BUILTIN_ANDPS,
  IX86_BUILTIN_ANDNPS,
  IX86_BUILTIN_ORPS,
  IX86_BUILTIN_XORPS,

  IX86_BUILTIN_EMMS,
  IX86_BUILTIN_LDMXCSR,
  IX86_BUILTIN_STMXCSR,
  IX86_BUILTIN_SFENCE,


  IX86_BUILTIN_FEMMS,
  IX86_BUILTIN_PAVGUSB,
  IX86_BUILTIN_PF2ID,
  IX86_BUILTIN_PFACC,
  IX86_BUILTIN_PFADD,
  IX86_BUILTIN_PFCMPEQ,
  IX86_BUILTIN_PFCMPGE,
  IX86_BUILTIN_PFCMPGT,
  IX86_BUILTIN_PFMAX,
  IX86_BUILTIN_PFMIN,
  IX86_BUILTIN_PFMUL,
  IX86_BUILTIN_PFRCP,
  IX86_BUILTIN_PFRCPIT1,
  IX86_BUILTIN_PFRCPIT2,
  IX86_BUILTIN_PFRSQIT1,
  IX86_BUILTIN_PFRSQRT,
  IX86_BUILTIN_PFSUB,
  IX86_BUILTIN_PFSUBR,
  IX86_BUILTIN_PI2FD,
  IX86_BUILTIN_PMULHRW,


  IX86_BUILTIN_PF2IW,
  IX86_BUILTIN_PFNACC,
  IX86_BUILTIN_PFPNACC,
  IX86_BUILTIN_PI2FW,
  IX86_BUILTIN_PSWAPDSI,
  IX86_BUILTIN_PSWAPDSF,

  IX86_BUILTIN_SSE_ZERO,
  IX86_BUILTIN_MMX_ZERO,


  IX86_BUILTIN_ADDPD,
  IX86_BUILTIN_ADDSD,
  IX86_BUILTIN_DIVPD,
  IX86_BUILTIN_DIVSD,
  IX86_BUILTIN_MULPD,
  IX86_BUILTIN_MULSD,
  IX86_BUILTIN_SUBPD,
  IX86_BUILTIN_SUBSD,

  IX86_BUILTIN_CMPEQPD,
  IX86_BUILTIN_CMPLTPD,
  IX86_BUILTIN_CMPLEPD,
  IX86_BUILTIN_CMPGTPD,
  IX86_BUILTIN_CMPGEPD,
  IX86_BUILTIN_CMPNEQPD,
  IX86_BUILTIN_CMPNLTPD,
  IX86_BUILTIN_CMPNLEPD,
  IX86_BUILTIN_CMPNGTPD,
  IX86_BUILTIN_CMPNGEPD,
  IX86_BUILTIN_CMPORDPD,
  IX86_BUILTIN_CMPUNORDPD,
  IX86_BUILTIN_CMPNEPD,
  IX86_BUILTIN_CMPEQSD,
  IX86_BUILTIN_CMPLTSD,
  IX86_BUILTIN_CMPLESD,
  IX86_BUILTIN_CMPNEQSD,
  IX86_BUILTIN_CMPNLTSD,
  IX86_BUILTIN_CMPNLESD,
  IX86_BUILTIN_CMPORDSD,
  IX86_BUILTIN_CMPUNORDSD,
  IX86_BUILTIN_CMPNESD,

  IX86_BUILTIN_COMIEQSD,
  IX86_BUILTIN_COMILTSD,
  IX86_BUILTIN_COMILESD,
  IX86_BUILTIN_COMIGTSD,
  IX86_BUILTIN_COMIGESD,
  IX86_BUILTIN_COMINEQSD,
  IX86_BUILTIN_UCOMIEQSD,
  IX86_BUILTIN_UCOMILTSD,
  IX86_BUILTIN_UCOMILESD,
  IX86_BUILTIN_UCOMIGTSD,
  IX86_BUILTIN_UCOMIGESD,
  IX86_BUILTIN_UCOMINEQSD,

  IX86_BUILTIN_MAXPD,
  IX86_BUILTIN_MAXSD,
  IX86_BUILTIN_MINPD,
  IX86_BUILTIN_MINSD,

  IX86_BUILTIN_ANDPD,
  IX86_BUILTIN_ANDNPD,
  IX86_BUILTIN_ORPD,
  IX86_BUILTIN_XORPD,

  IX86_BUILTIN_SQRTPD,
  IX86_BUILTIN_SQRTSD,

  IX86_BUILTIN_UNPCKHPD,
  IX86_BUILTIN_UNPCKLPD,

  IX86_BUILTIN_SHUFPD,

  IX86_BUILTIN_LOADAPD,
  IX86_BUILTIN_LOADUPD,
  IX86_BUILTIN_STOREAPD,
  IX86_BUILTIN_STOREUPD,
  IX86_BUILTIN_LOADSD,
  IX86_BUILTIN_STORESD,
  IX86_BUILTIN_MOVSD,

  IX86_BUILTIN_LOADHPD,
  IX86_BUILTIN_LOADLPD,
  IX86_BUILTIN_STOREHPD,
  IX86_BUILTIN_STORELPD,

  IX86_BUILTIN_CVTDQ2PD,
  IX86_BUILTIN_CVTDQ2PS,

  IX86_BUILTIN_CVTPD2DQ,
  IX86_BUILTIN_CVTPD2PI,
  IX86_BUILTIN_CVTPD2PS,
  IX86_BUILTIN_CVTTPD2DQ,
  IX86_BUILTIN_CVTTPD2PI,

  IX86_BUILTIN_CVTPI2PD,
  IX86_BUILTIN_CVTSI2SD,
  IX86_BUILTIN_CVTSI642SD,

  IX86_BUILTIN_CVTSD2SI,
  IX86_BUILTIN_CVTSD2SI64,
  IX86_BUILTIN_CVTSD2SS,
  IX86_BUILTIN_CVTSS2SD,
  IX86_BUILTIN_CVTTSD2SI,
  IX86_BUILTIN_CVTTSD2SI64,

  IX86_BUILTIN_CVTPS2DQ,
  IX86_BUILTIN_CVTPS2PD,
  IX86_BUILTIN_CVTTPS2DQ,

  IX86_BUILTIN_MOVNTI,
  IX86_BUILTIN_MOVNTPD,
  IX86_BUILTIN_MOVNTDQ,

  IX86_BUILTIN_SETPD1,
  IX86_BUILTIN_SETPD,
  IX86_BUILTIN_CLRPD,
  IX86_BUILTIN_SETRPD,
  IX86_BUILTIN_LOADPD1,
  IX86_BUILTIN_LOADRPD,
  IX86_BUILTIN_STOREPD1,
  IX86_BUILTIN_STORERPD,


  IX86_BUILTIN_MASKMOVDQU,
  IX86_BUILTIN_MOVMSKPD,
  IX86_BUILTIN_PMOVMSKB128,
  IX86_BUILTIN_MOVQ2DQ,
  IX86_BUILTIN_MOVDQ2Q,

  IX86_BUILTIN_PACKSSWB128,
  IX86_BUILTIN_PACKSSDW128,
  IX86_BUILTIN_PACKUSWB128,

  IX86_BUILTIN_PADDB128,
  IX86_BUILTIN_PADDW128,
  IX86_BUILTIN_PADDD128,
  IX86_BUILTIN_PADDQ128,
  IX86_BUILTIN_PADDSB128,
  IX86_BUILTIN_PADDSW128,
  IX86_BUILTIN_PADDUSB128,
  IX86_BUILTIN_PADDUSW128,
  IX86_BUILTIN_PSUBB128,
  IX86_BUILTIN_PSUBW128,
  IX86_BUILTIN_PSUBD128,
  IX86_BUILTIN_PSUBQ128,
  IX86_BUILTIN_PSUBSB128,
  IX86_BUILTIN_PSUBSW128,
  IX86_BUILTIN_PSUBUSB128,
  IX86_BUILTIN_PSUBUSW128,

  IX86_BUILTIN_PAND128,
  IX86_BUILTIN_PANDN128,
  IX86_BUILTIN_POR128,
  IX86_BUILTIN_PXOR128,

  IX86_BUILTIN_PAVGB128,
  IX86_BUILTIN_PAVGW128,

  IX86_BUILTIN_PCMPEQB128,
  IX86_BUILTIN_PCMPEQW128,
  IX86_BUILTIN_PCMPEQD128,
  IX86_BUILTIN_PCMPGTB128,
  IX86_BUILTIN_PCMPGTW128,
  IX86_BUILTIN_PCMPGTD128,

  IX86_BUILTIN_PEXTRW128,
  IX86_BUILTIN_PINSRW128,

  IX86_BUILTIN_PMADDWD128,

  IX86_BUILTIN_PMAXSW128,
  IX86_BUILTIN_PMAXUB128,
  IX86_BUILTIN_PMINSW128,
  IX86_BUILTIN_PMINUB128,

  IX86_BUILTIN_PMULUDQ,
  IX86_BUILTIN_PMULUDQ128,
  IX86_BUILTIN_PMULHUW128,
  IX86_BUILTIN_PMULHW128,
  IX86_BUILTIN_PMULLW128,

  IX86_BUILTIN_PSADBW128,
  IX86_BUILTIN_PSHUFHW,
  IX86_BUILTIN_PSHUFLW,
  IX86_BUILTIN_PSHUFD,

  IX86_BUILTIN_PSLLW128,
  IX86_BUILTIN_PSLLD128,
  IX86_BUILTIN_PSLLQ128,
  IX86_BUILTIN_PSRAW128,
  IX86_BUILTIN_PSRAD128,
  IX86_BUILTIN_PSRLW128,
  IX86_BUILTIN_PSRLD128,
  IX86_BUILTIN_PSRLQ128,
  IX86_BUILTIN_PSLLDQI128,
  IX86_BUILTIN_PSLLWI128,
  IX86_BUILTIN_PSLLDI128,
  IX86_BUILTIN_PSLLQI128,
  IX86_BUILTIN_PSRAWI128,
  IX86_BUILTIN_PSRADI128,
  IX86_BUILTIN_PSRLDQI128,
  IX86_BUILTIN_PSRLWI128,
  IX86_BUILTIN_PSRLDI128,
  IX86_BUILTIN_PSRLQI128,

  IX86_BUILTIN_PUNPCKHBW128,
  IX86_BUILTIN_PUNPCKHWD128,
  IX86_BUILTIN_PUNPCKHDQ128,
  IX86_BUILTIN_PUNPCKHQDQ128,
  IX86_BUILTIN_PUNPCKLBW128,
  IX86_BUILTIN_PUNPCKLWD128,
  IX86_BUILTIN_PUNPCKLDQ128,
  IX86_BUILTIN_PUNPCKLQDQ128,

  IX86_BUILTIN_CLFLUSH,
  IX86_BUILTIN_MFENCE,
  IX86_BUILTIN_LFENCE,


  IX86_BUILTIN_ADDSUBPS,
  IX86_BUILTIN_HADDPS,
  IX86_BUILTIN_HSUBPS,
  IX86_BUILTIN_MOVSHDUP,
  IX86_BUILTIN_MOVSLDUP,
  IX86_BUILTIN_ADDSUBPD,
  IX86_BUILTIN_HADDPD,
  IX86_BUILTIN_HSUBPD,
  IX86_BUILTIN_LOADDDUP,
  IX86_BUILTIN_MOVDDUP,
  IX86_BUILTIN_LDDQU,

  IX86_BUILTIN_MONITOR,
  IX86_BUILTIN_MWAIT,

  IX86_BUILTIN_MAX
};
# 2714 "../../gcc/gcc/config/i386/i386.h"
extern int const dbx_register_map[53];
extern int const dbx64_register_map[53];
extern int const svr4_dbx_register_map[53];
# 2843 "../../gcc/gcc/config/i386/i386.h"
enum processor_type
{
  PROCESSOR_I386,
  PROCESSOR_I486,
  PROCESSOR_PENTIUM,
  PROCESSOR_PENTIUMPRO,
  PROCESSOR_K6,
  PROCESSOR_ATHLON,
  PROCESSOR_PENTIUM4,
  PROCESSOR_K8,
  PROCESSOR_NOCONA,
  PROCESSOR_max
};

extern enum processor_type ix86_tune;
extern const char *ix86_tune_string;

extern enum processor_type ix86_arch;
extern const char *ix86_arch_string;

enum fpmath_unit
{
  FPMATH_387 = 1,
  FPMATH_SSE = 2
};

extern enum fpmath_unit ix86_fpmath;
extern const char *ix86_fpmath_string;

enum tls_dialect
{
  TLS_DIALECT_GNU,
  TLS_DIALECT_SUN
};

extern enum tls_dialect ix86_tls_dialect;
extern const char *ix86_tls_dialect_string;

enum cmodel {
  CM_32,
  CM_SMALL,
  CM_KERNEL,
  CM_MEDIUM,
  CM_LARGE,
  CM_SMALL_PIC
};

extern enum cmodel ix86_cmodel;
extern const char *ix86_cmodel_string;






enum asm_dialect {
  ASM_ATT,
  ASM_INTEL
};

extern const char *ix86_asm_string;
extern enum asm_dialect ix86_asm_dialect;

extern int ix86_regparm;
extern const char *ix86_regparm_string;

extern unsigned int ix86_preferred_stack_boundary;
extern const char *ix86_preferred_stack_boundary_string;

extern int ix86_branch_cost;
extern const char *ix86_branch_cost_string;

extern const char *ix86_debug_arg_string;
extern const char *ix86_debug_addr_string;


extern const char *ix86_align_loops_string;
extern const char *ix86_align_jumps_string;
extern const char *ix86_align_funcs_string;


extern enum reg_class const regclass_map[53];

extern rtx ix86_compare_op0;
extern rtx ix86_compare_op1;
# 3010 "../../gcc/gcc/config/i386/i386.h"
struct machine_function
{
  struct stack_local_entry *stack_locals;
  const char *some_ld_name;
  int save_varrargs_registers;
  int accesses_prev_frame;
  int optimize_mode_switching;


  int use_fast_prologue_epilogue;


  int use_fast_prologue_epilogue_nregs;
};
# 5 "./tm.h" 2
# 1 "../../gcc/gcc/config/i386/unix.h" 1
# 6 "./tm.h" 2
# 1 "../../gcc/gcc/config/i386/att.h" 1
# 7 "./tm.h" 2
# 1 "../../gcc/gcc/config/dbxelf.h" 1
# 8 "./tm.h" 2
# 1 "../../gcc/gcc/config/elfos.h" 1
# 9 "./tm.h" 2
# 1 "../../gcc/gcc/config/svr4.h" 1
# 10 "./tm.h" 2
# 1 "../../gcc/gcc/config/linux.h" 1
# 11 "./tm.h" 2
# 1 "../../gcc/gcc/config/i386/linux.h" 1
# 12 "./tm.h" 2
# 1 "../../gcc/gcc/defaults.h" 1
# 13 "./tm.h" 2
# 25 "../../gcc/gcc/gengtype.c" 2
# 1 "../../gcc/gcc/gengtype.h" 1
# 23 "../../gcc/gcc/gengtype.h"
struct fileloc {
  const char *file;
  int line;
};


enum typekind {
  TYPE_SCALAR,
  TYPE_STRING,
  TYPE_STRUCT,
  TYPE_UNION,
  TYPE_POINTER,
  TYPE_ARRAY,
  TYPE_LANG_STRUCT,
  TYPE_PARAM_STRUCT
};

typedef struct pair *pair_p;
typedef struct type *type_p;
typedef unsigned lang_bitmap;


struct nested_ptr_data {
  type_p type;
  const char *convert_to;
  const char *convert_from;
};


typedef struct options {
  struct options *next;
  const char *name;
  const char *info;
} *options_p;


struct pair {
  pair_p next;
  const char *name;
  type_p type;
  struct fileloc line;
  options_p opt;
};




enum gc_used_enum
  {
    GC_UNUSED = 0,
    GC_USED,
    GC_MAYBE_POINTED_TO,
    GC_POINTED_TO
  };

struct type {
  enum typekind kind;
  type_p next;
  type_p pointer_to;
  enum gc_used_enum gc_used;
  union {
    type_p p;
    struct {
      const char *tag;
      struct fileloc line;
      pair_p fields;
      options_p opt;
      lang_bitmap bitmap;
      type_p lang_struct;
    } s;
    char *sc;
    struct {
      type_p p;
      const char *len;
    } a;
    struct {
      type_p stru;
      type_p param[10];
      struct fileloc line;
    } param_struct;
  } u;
};
# 116 "../../gcc/gcc/gengtype.h"
extern struct type string_type;


extern int lexer_toplevel_done;
extern struct fileloc lexer_line;


extern void error_at_line
  (struct fileloc *pos, const char *msg, ...) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__nonnull__ (2)));


extern int xvasprintf (char **, const char *, va_list)
     __attribute__ ((__format__ (__printf__, 2, 0))) __attribute__ ((__nonnull__ (2)));

extern char * xasprintf (const char *, ...)
     __attribute__ ((__format__ (__printf__, 1, 2))) __attribute__ ((__nonnull__ (1)));


extern void do_typedef (const char *s, type_p t, struct fileloc *pos);
extern type_p resolve_typedef (const char *s, struct fileloc *pos);
extern void new_structure (const char *name, int isunion,
      struct fileloc *pos, pair_p fields,
      options_p o);
extern type_p find_structure (const char *s, int isunion);
extern type_p create_scalar_type (const char *name, size_t name_len);
extern type_p create_pointer (type_p t);
extern type_p create_array (type_p t, const char *len);
extern options_p create_option (const char *name, void *info);
extern type_p adjust_field_type (type_p, options_p);
extern void note_variable (const char *s, type_p t, options_p o,
      struct fileloc *pos);
extern void note_yacc_type (options_p o, pair_p fields,
       pair_p typeinfo, struct fileloc *pos);


extern int yylex (void);
extern void yyerror (const char *);
extern int yyparse (void);
extern void parse_file (const char *name);




struct outf
{
  struct outf *next;
  const char *name;
  size_t buflength;
  size_t bufused;
  char *buf;
};

typedef struct outf * outf_p;




extern outf_p get_output_file_with_visibility
   (const char *input_file);
const char *get_output_file_name (const char *);



extern outf_p base_files[];




extern lang_bitmap get_base_file_bitmap (const char *input_file);


extern void oprintf (outf_p o, const char *S, ...)
     __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__nonnull__ (2)));
# 26 "../../gcc/gcc/gengtype.c" 2
# 1 "./gtyp-gen.h" 1

static const char *const srcdir =
"../../gcc/gcc"
;
static const char *const lang_files[] = {
"../../gcc/gcc/cp/mangle.c",
"../../gcc/gcc/cp/name-lookup.h",
"../../gcc/gcc/cp/name-lookup.c",
"../../gcc/gcc/cp/cp-tree.h",
"../../gcc/gcc/cp/decl.h",
"../../gcc/gcc/cp/call.c",
"../../gcc/gcc/cp/decl.c",
"../../gcc/gcc/cp/decl2.c",
"../../gcc/gcc/cp/pt.c",
"../../gcc/gcc/cp/repo.c",
"../../gcc/gcc/cp/semantics.c",
"../../gcc/gcc/cp/tree.c",
"../../gcc/gcc/cp/parser.c",
"../../gcc/gcc/cp/method.c",
"../../gcc/gcc/cp/typeck2.c",
"../../gcc/gcc/c-common.c",
"../../gcc/gcc/c-common.h",
"../../gcc/gcc/c-lex.c",
"../../gcc/gcc/c-pragma.c",
"../../gcc/gcc/java/java-tree.h",
"../../gcc/gcc/java/jcf.h",
"../../gcc/gcc/java/lex.h",
"../../gcc/gcc/java/parse.h",
"../../gcc/gcc/java/builtins.c",
"../../gcc/gcc/java/class.c",
"../../gcc/gcc/java/constants.c",
"../../gcc/gcc/java/decl.c",
"../../gcc/gcc/java/expr.c",
"../../gcc/gcc/java/jcf-parse.c",
"../../gcc/gcc/java/jcf-write.c",
"../../gcc/gcc/java/lang.c",
"../../gcc/gcc/java/mangle.c",
"../../gcc/gcc/java/parse.y",
"../../gcc/gcc/java/resource.c",
"../../gcc/gcc/c-lang.c",
"../../gcc/gcc/c-parse.in",
"../../gcc/gcc/c-tree.h",
"../../gcc/gcc/c-decl.c",
"../../gcc/gcc/c-common.c",
"../../gcc/gcc/c-common.h",
"../../gcc/gcc/c-pragma.c",
"../../gcc/gcc/c-objc-common.c",
((void *)0)};
static const char *const langs_for_lang_files[] = {
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"cp",
"java",
"java",
"java",
"java",
"java",
"java",
"java",
"java",
"java",
"java",
"java",
"java",
"java",
"java",
"java",
"c",
"c",
"c",
"c",
"c",
"c",
"c",
"c",
((void *)0)};
static const char *const all_files[] = {
"../../gcc/gcc/input.h",
"../../gcc/gcc/coretypes.h",
"../../gcc/gcc/../libcpp/include/line-map.h",
"../../gcc/gcc/../libcpp/include/cpplib.h",
"../../gcc/gcc/../libcpp/include/cpp-id-data.h",
"auto-host.h",
"../../gcc/gcc/../include/ansidecl.h",
"../../gcc/gcc/config/i386/i386.h",
"../../gcc/gcc/config/i386/unix.h",
"../../gcc/gcc/config/i386/att.h",
"../../gcc/gcc/config/dbxelf.h",
"../../gcc/gcc/config/elfos.h",
"../../gcc/gcc/config/svr4.h",
"../../gcc/gcc/config/linux.h",
"../../gcc/gcc/config/i386/linux.h",
"../../gcc/gcc/defaults.h",
"../../gcc/gcc/../include/hashtab.h",
"../../gcc/gcc/../include/splay-tree.h",
"../../gcc/gcc/bitmap.h",
"../../gcc/gcc/coverage.c",
"../../gcc/gcc/function.h",
"../../gcc/gcc/rtl.h",
"../../gcc/gcc/optabs.h",
"../../gcc/gcc/tree.h",
"../../gcc/gcc/libfuncs.h",
"../../gcc/gcc/../libcpp/include/symtab.h",
"../../gcc/gcc/real.h",
"../../gcc/gcc/varray.h",
"../../gcc/gcc/insn-addr.h",
"../../gcc/gcc/hwint.h",
"../../gcc/gcc/cselib.h",
"../../gcc/gcc/basic-block.h",
"../../gcc/gcc/cgraph.h",
"../../gcc/gcc/c-common.h",
"../../gcc/gcc/c-tree.h",
"../../gcc/gcc/reload.h",
"../../gcc/gcc/alias.c",
"../../gcc/gcc/bitmap.c",
"../../gcc/gcc/cselib.c",
"../../gcc/gcc/cgraph.c",
"../../gcc/gcc/dbxout.c",
"../../gcc/gcc/dwarf2out.c",
"../../gcc/gcc/dwarf2asm.c",
"../../gcc/gcc/dojump.c",
"../../gcc/gcc/emit-rtl.c",
"../../gcc/gcc/except.c",
"../../gcc/gcc/explow.c",
"../../gcc/gcc/expr.c",
"../../gcc/gcc/fold-const.c",
"../../gcc/gcc/function.c",
"../../gcc/gcc/gcse.c",
"../../gcc/gcc/integrate.c",
"../../gcc/gcc/lists.c",
"../../gcc/gcc/optabs.c",
"../../gcc/gcc/profile.c",
"../../gcc/gcc/ra-build.c",
"../../gcc/gcc/regclass.c",
"../../gcc/gcc/reg-stack.c",
"../../gcc/gcc/cfglayout.c",
"../../gcc/gcc/sdbout.c",
"../../gcc/gcc/stor-layout.c",
"../../gcc/gcc/stringpool.c",
"../../gcc/gcc/tree.c",
"../../gcc/gcc/varasm.c",
"../../gcc/gcc/tree-mudflap.c",
"../../gcc/gcc/tree-flow.h",
"../../gcc/gcc/c-objc-common.c",
"../../gcc/gcc/c-common.c",
"../../gcc/gcc/c-parse.in",
"../../gcc/gcc/tree-ssanames.c",
"../../gcc/gcc/tree-eh.c",
"../../gcc/gcc/tree-phinodes.c",
"../../gcc/gcc/tree-cfg.c",
"../../gcc/gcc/tree-dfa.c",
"../../gcc/gcc/tree-ssa-propagate.c",
"../../gcc/gcc/tree-iterator.c",
"../../gcc/gcc/gimplify.c",
"../../gcc/gcc/tree-chrec.h",
"../../gcc/gcc/tree-ssa-operands.h",
"../../gcc/gcc/tree-ssa-operands.c",
"../../gcc/gcc/tree-profile.c",
"../../gcc/gcc/rtl-profile.c",
"../../gcc/gcc/tree-nested.c",
"../../gcc/gcc/config/i386/i386.c",
"../../gcc/gcc/cp/mangle.c",
"../../gcc/gcc/cp/name-lookup.h",
"../../gcc/gcc/cp/name-lookup.c",
"../../gcc/gcc/cp/cp-tree.h",
"../../gcc/gcc/cp/decl.h",
"../../gcc/gcc/cp/call.c",
"../../gcc/gcc/cp/decl.c",
"../../gcc/gcc/cp/decl2.c",
"../../gcc/gcc/cp/pt.c",
"../../gcc/gcc/cp/repo.c",
"../../gcc/gcc/cp/semantics.c",
"../../gcc/gcc/cp/tree.c",
"../../gcc/gcc/cp/parser.c",
"../../gcc/gcc/cp/method.c",
"../../gcc/gcc/cp/typeck2.c",
"../../gcc/gcc/c-common.c",
"../../gcc/gcc/c-common.h",
"../../gcc/gcc/c-lex.c",
"../../gcc/gcc/c-pragma.c",
"../../gcc/gcc/java/java-tree.h",
"../../gcc/gcc/java/jcf.h",
"../../gcc/gcc/java/lex.h",
"../../gcc/gcc/java/parse.h",
"../../gcc/gcc/java/builtins.c",
"../../gcc/gcc/java/class.c",
"../../gcc/gcc/java/constants.c",
"../../gcc/gcc/java/decl.c",
"../../gcc/gcc/java/expr.c",
"../../gcc/gcc/java/jcf-parse.c",
"../../gcc/gcc/java/jcf-write.c",
"../../gcc/gcc/java/lang.c",
"../../gcc/gcc/java/mangle.c",
"../../gcc/gcc/java/parse.y",
"../../gcc/gcc/java/resource.c",
"../../gcc/gcc/c-lang.c",
"../../gcc/gcc/c-parse.in",
"../../gcc/gcc/c-tree.h",
"../../gcc/gcc/c-decl.c",
"../../gcc/gcc/c-common.c",
"../../gcc/gcc/c-common.h",
"../../gcc/gcc/c-pragma.c",
"../../gcc/gcc/c-objc-common.c",
 ((void *)0)};
static const char *const lang_dir_names[] = { "c",
"cp",
"java",
((void *)0)};
# 27 "../../gcc/gcc/gengtype.c" 2
# 1 "../../gcc/gcc/errors.h" 1
# 33 "../../gcc/gcc/errors.h"
extern void warning (const char *, ...);
extern void error (const char *, ...);
extern void fatal (const char *, ...) __attribute__ ((__noreturn__));
extern void internal_error (const char *, ...) __attribute__ ((__noreturn__));
extern const char *trim_filename (const char *);

extern int have_error;
extern const char *progname;
# 28 "../../gcc/gcc/gengtype.c" 2


static int hit_error = 0;

static void gen_rtx_next (void);
static void write_rtx_next (void);
static void open_base_files (void);
static void close_output_files (void);



void
error_at_line (struct fileloc *pos, const char *msg, ...)
{
  va_list ap;

  __builtin_va_start(ap,msg);

  fprintf (stderr, "%s:%d: ", pos->file, pos->line);
  vfprintf (stderr, msg, ap);
  fputc_unlocked ('\n', stderr);
  hit_error = 1;

  __builtin_va_end(ap);
}


int
xvasprintf (char **result, const char *format, va_list args)
{
  int ret = vasprintf (result, format, args);
  if (*result == ((void *)0) || ret < 0)
    {
      fputs_unlocked ("gengtype: out of memory", stderr);
      xexit (1);
    }
  return ret;
}


char *
xasprintf (const char *format, ...)
{
  char *result;
  va_list ap;

  __builtin_va_start(ap,format);
  xvasprintf (&result, format, ap);
  __builtin_va_end(ap);
  return result;
}



struct type string_type = {
  TYPE_STRING, ((void *)0), ((void *)0), GC_USED, {0}
};



static pair_p typedefs;
static type_p structures;
static type_p param_structs;
static pair_p variables;

static void do_scalar_typedef (const char *, struct fileloc *);
static type_p find_param_structure
  (type_p t, type_p param[10]);
static type_p adjust_field_tree_exp (type_p t, options_p opt);
static type_p adjust_field_rtx_def (type_p t, options_p opt);



void
do_typedef (const char *s, type_p t, struct fileloc *pos)
{
  pair_p p;

  for (p = typedefs; p != ((void *)0); p = p->next)
    if (strcmp (p->name, s) == 0)
      {
 if (p->type != t)
   {
     error_at_line (pos, "type `%s' previously defined", s);
     error_at_line (&p->line, "previously defined here");
   }
 return;
      }

  p = ((struct pair *) xmalloc (sizeof (struct pair)));
  p->next = typedefs;
  p->name = s;
  p->type = t;
  p->line = *pos;
  typedefs = p;
}



static void
do_scalar_typedef (const char *s, struct fileloc *pos)
{
  do_typedef (s, create_scalar_type (s, strlen (s)), pos);
}



type_p
resolve_typedef (const char *s, struct fileloc *pos)
{
  pair_p p;
  for (p = typedefs; p != ((void *)0); p = p->next)
    if (strcmp (p->name, s) == 0)
      return p->type;
  error_at_line (pos, "unidentified type `%s'", s);
  return create_scalar_type ("char", 4);
}




void
new_structure (const char *name, int isunion, struct fileloc *pos,
        pair_p fields, options_p o)
{
  type_p si;
  type_p s = ((void *)0);
  lang_bitmap bitmap = get_base_file_bitmap (pos->file);

  for (si = structures; si != ((void *)0); si = si->next)
    if (strcmp (name, si->u.s.tag) == 0
 && ((si)->kind == TYPE_UNION || ((si)->kind == TYPE_LANG_STRUCT && (si)->u.s.lang_struct->kind == TYPE_UNION)) == isunion)
      {
 type_p ls = ((void *)0);
 if (si->kind == TYPE_LANG_STRUCT)
   {
     ls = si;

     for (si = ls->u.s.lang_struct; si != ((void *)0); si = si->next)
       if (si->u.s.bitmap == bitmap)
  s = si;
   }
 else if (si->u.s.line.file != ((void *)0) && si->u.s.bitmap != bitmap)
   {
     ls = si;
     si = ((struct type *) xcalloc (1, sizeof (struct type)));
     memcpy (si, ls, sizeof (struct type));
     ls->kind = TYPE_LANG_STRUCT;
     ls->u.s.lang_struct = si;
     ls->u.s.fields = ((void *)0);
     si->next = ((void *)0);
     si->pointer_to = ((void *)0);
     si->u.s.lang_struct = ls;
   }
 else
   s = si;

 if (ls != ((void *)0) && s == ((void *)0))
   {
     s = ((struct type *) xcalloc (1, sizeof (struct type)));
     s->next = ls->u.s.lang_struct;
     ls->u.s.lang_struct = s;
     s->u.s.lang_struct = ls;
   }
 break;
      }

  if (s == ((void *)0))
    {
      s = ((struct type *) xcalloc (1, sizeof (struct type)));
      s->next = structures;
      structures = s;
    }

  if (s->u.s.line.file != ((void *)0)
      || (s->u.s.lang_struct && (s->u.s.lang_struct->u.s.bitmap & bitmap)))
    {
      error_at_line (pos, "duplicate structure definition");
      error_at_line (&s->u.s.line, "previous definition here");
    }

  s->kind = isunion ? TYPE_UNION : TYPE_STRUCT;
  s->u.s.tag = name;
  s->u.s.line = *pos;
  s->u.s.fields = fields;
  s->u.s.opt = o;
  s->u.s.bitmap = bitmap;
  if (s->u.s.lang_struct)
    s->u.s.lang_struct->u.s.bitmap |= bitmap;
}





type_p
find_structure (const char *name, int isunion)
{
  type_p s;

  for (s = structures; s != ((void *)0); s = s->next)
    if (strcmp (name, s->u.s.tag) == 0
 && ((s)->kind == TYPE_UNION || ((s)->kind == TYPE_LANG_STRUCT && (s)->u.s.lang_struct->kind == TYPE_UNION)) == isunion)
      return s;

  s = ((struct type *) xcalloc (1, sizeof (struct type)));
  s->next = structures;
  structures = s;
  s->kind = isunion ? TYPE_UNION : TYPE_STRUCT;
  s->u.s.tag = name;
  structures = s;
  return s;
}





static type_p
find_param_structure (type_p t, type_p param[10])
{
  type_p res;

  for (res = param_structs; res; res = res->next)
    if (res->u.param_struct.stru == t
 && memcmp (res->u.param_struct.param, param,
     sizeof (type_p) * 10) == 0)
      break;
  if (res == ((void *)0))
    {
      res = ((struct type *) xcalloc (1, sizeof (struct type)));
      res->kind = TYPE_PARAM_STRUCT;
      res->next = param_structs;
      param_structs = res;
      res->u.param_struct.stru = t;
      memcpy (res->u.param_struct.param, param, sizeof (type_p) * 10);
    }
  return res;
}



type_p
create_scalar_type (const char *name, size_t name_len)
{
  type_p r = ((struct type *) xcalloc (1, sizeof (struct type)));
  r->kind = TYPE_SCALAR;
  r->u.sc = (char *) xmemdup (name, name_len, name_len + 1);
  return r;
}



type_p
create_pointer (type_p t)
{
  if (! t->pointer_to)
    {
      type_p r = ((struct type *) xcalloc (1, sizeof (struct type)));
      r->kind = TYPE_POINTER;
      r->u.p = t;
      t->pointer_to = r;
    }
  return t->pointer_to;
}



type_p
create_array (type_p t, const char *len)
{
  type_p v;

  v = ((struct type *) xcalloc (1, sizeof (struct type)));
  v->kind = TYPE_ARRAY;
  v->u.a.p = t;
  v->u.a.len = len;
  return v;
}


options_p
create_option (const char *name, void *info)
{
  options_p o = ((struct options *) xmalloc (sizeof (struct options)));
  o->name = name;
  o->info = (const char*) info;
  return o;
}




void
note_variable (const char *s, type_p t, options_p o, struct fileloc *pos)
{
  pair_p n;
  n = ((struct pair *) xmalloc (sizeof (struct pair)));
  n->name = s;
  n->type = t;
  n->line = *pos;
  n->opt = o;
  n->next = variables;
  variables = n;
}






enum rtx_code {

# 1 "../../gcc/gcc/rtl.def" 1
# 82 "../../gcc/gcc/rtl.def"
UNKNOWN ,






EXPR_LIST ,



INSN_LIST ,





SEQUENCE ,


ADDRESS ,
# 115 "../../gcc/gcc/rtl.def"
INSN ,



JUMP_INSN ,






CALL_INSN ,


BARRIER ,







CODE_LABEL ,
# 152 "../../gcc/gcc/rtl.def"
NOTE ,
# 165 "../../gcc/gcc/rtl.def"
COND_EXEC ,


PARALLEL ,







ASM_INPUT ,
# 204 "../../gcc/gcc/rtl.def"
ASM_OPERANDS ,
# 216 "../../gcc/gcc/rtl.def"
UNSPEC ,


UNSPEC_VOLATILE ,



ADDR_VEC ,
# 248 "../../gcc/gcc/rtl.def"
ADDR_DIFF_VEC ,
# 259 "../../gcc/gcc/rtl.def"
PREFETCH ,
# 271 "../../gcc/gcc/rtl.def"
SET ,




USE ,




CLOBBER ,





CALL ,



RETURN ,





TRAP_IF ,




RESX ,






CONST_INT ,




CONST_DOUBLE ,


CONST_VECTOR ,




CONST_STRING ,





CONST ,



PC ,


VALUE ,
# 345 "../../gcc/gcc/rtl.def"
REG ,






SCRATCH ,
# 362 "../../gcc/gcc/rtl.def"
SUBREG ,
# 375 "../../gcc/gcc/rtl.def"
STRICT_LOW_PART ,





CONCAT ,




MEM ,





LABEL_REF ,






SYMBOL_REF ,






CC0 ,
# 418 "../../gcc/gcc/rtl.def"
IF_THEN_ELSE ,


COMPARE ,


PLUS ,


MINUS ,


NEG ,

MULT ,


DIV ,

MOD ,


UDIV ,
UMOD ,


AND ,

IOR ,

XOR ,

NOT ,




ASHIFT ,
ROTATE ,
ASHIFTRT ,
LSHIFTRT ,
ROTATERT ,





SMIN ,
SMAX ,
UMIN ,
UMAX ,
# 477 "../../gcc/gcc/rtl.def"
PRE_DEC ,
PRE_INC ,
POST_DEC ,
POST_INC ,
# 494 "../../gcc/gcc/rtl.def"
PRE_MODIFY ,
POST_MODIFY ,



NE ,
EQ ,
GE ,
GT ,
LE ,
LT ,
GEU ,
GTU ,
LEU ,
LTU ,


UNORDERED ,
ORDERED ,


UNEQ ,
UNGE ,
UNGT ,
UNLE ,
UNLT ,


LTGT ,




SIGN_EXTEND ,


ZERO_EXTEND ,


TRUNCATE ,


FLOAT_EXTEND ,
FLOAT_TRUNCATE ,


FLOAT ,







FIX ,


UNSIGNED_FLOAT ,




UNSIGNED_FIX ,


ABS ,


SQRT ,




FFS ,


CLZ ,


CTZ ,


POPCOUNT ,


PARITY ,
# 590 "../../gcc/gcc/rtl.def"
SIGN_EXTRACT ,


ZERO_EXTRACT ,




HIGH ,



LO_SUM ,






VEC_MERGE ,





VEC_SELECT ,




VEC_CONCAT ,





VEC_DUPLICATE ,


SS_PLUS ,


US_PLUS ,


SS_MINUS ,


US_MINUS ,


SS_TRUNCATE ,


US_TRUNCATE ,


VAR_LOCATION ,
# 342 "../../gcc/gcc/gengtype.c" 2

  NUM_RTX_CODE
};

static const char * const rtx_name[NUM_RTX_CODE] = {

# 1 "../../gcc/gcc/rtl.def" 1
# 82 "../../gcc/gcc/rtl.def"
"UnKnown" ,






"expr_list" ,



"insn_list" ,





"sequence" ,


"address" ,
# 115 "../../gcc/gcc/rtl.def"
"insn" ,



"jump_insn" ,






"call_insn" ,


"barrier" ,







"code_label" ,
# 152 "../../gcc/gcc/rtl.def"
"note" ,
# 165 "../../gcc/gcc/rtl.def"
"cond_exec" ,


"parallel" ,







"asm_input" ,
# 204 "../../gcc/gcc/rtl.def"
"asm_operands" ,
# 216 "../../gcc/gcc/rtl.def"
"unspec" ,


"unspec_volatile" ,



"addr_vec" ,
# 248 "../../gcc/gcc/rtl.def"
"addr_diff_vec" ,
# 259 "../../gcc/gcc/rtl.def"
"prefetch" ,
# 271 "../../gcc/gcc/rtl.def"
"set" ,




"use" ,




"clobber" ,





"call" ,



"return" ,





"trap_if" ,




"resx" ,






"const_int" ,




"const_double" ,


"const_vector" ,




"const_string" ,





"const" ,



"pc" ,


"value" ,
# 345 "../../gcc/gcc/rtl.def"
"reg" ,






"scratch" ,
# 362 "../../gcc/gcc/rtl.def"
"subreg" ,
# 375 "../../gcc/gcc/rtl.def"
"strict_low_part" ,





"concat" ,




"mem" ,





"label_ref" ,






"symbol_ref" ,






"cc0" ,
# 418 "../../gcc/gcc/rtl.def"
"if_then_else" ,


"compare" ,


"plus" ,


"minus" ,


"neg" ,

"mult" ,


"div" ,

"mod" ,


"udiv" ,
"umod" ,


"and" ,

"ior" ,

"xor" ,

"not" ,




"ashift" ,
"rotate" ,
"ashiftrt" ,
"lshiftrt" ,
"rotatert" ,





"smin" ,
"smax" ,
"umin" ,
"umax" ,
# 477 "../../gcc/gcc/rtl.def"
"pre_dec" ,
"pre_inc" ,
"post_dec" ,
"post_inc" ,
# 494 "../../gcc/gcc/rtl.def"
"pre_modify" ,
"post_modify" ,



"ne" ,
"eq" ,
"ge" ,
"gt" ,
"le" ,
"lt" ,
"geu" ,
"gtu" ,
"leu" ,
"ltu" ,


"unordered" ,
"ordered" ,


"uneq" ,
"unge" ,
"ungt" ,
"unle" ,
"unlt" ,


"ltgt" ,




"sign_extend" ,


"zero_extend" ,


"truncate" ,


"float_extend" ,
"float_truncate" ,


"float" ,







"fix" ,


"unsigned_float" ,




"unsigned_fix" ,


"abs" ,


"sqrt" ,




"ffs" ,


"clz" ,


"ctz" ,


"popcount" ,


"parity" ,
# 590 "../../gcc/gcc/rtl.def"
"sign_extract" ,


"zero_extract" ,




"high" ,



"lo_sum" ,






"vec_merge" ,





"vec_select" ,




"vec_concat" ,





"vec_duplicate" ,


"ss_plus" ,


"us_plus" ,


"ss_minus" ,


"us_minus" ,


"ss_truncate" ,


"us_truncate" ,


"var_location" ,
# 349 "../../gcc/gcc/gengtype.c" 2

};

static const char * const rtx_format[NUM_RTX_CODE] = {

# 1 "../../gcc/gcc/rtl.def" 1
# 82 "../../gcc/gcc/rtl.def"
"*" ,






"ee" ,



"ue" ,





"E" ,


"e" ,
# 115 "../../gcc/gcc/rtl.def"
"iuuBieiee" ,



"iuuBieiee0" ,






"iuuBieieee" ,


"iuu000000" ,







"iuuB00is" ,
# 152 "../../gcc/gcc/rtl.def"
"iuuB0ni" ,
# 165 "../../gcc/gcc/rtl.def"
"ee" ,


"E" ,







"s" ,
# 204 "../../gcc/gcc/rtl.def"
"ssiEEsi" ,
# 216 "../../gcc/gcc/rtl.def"
"Ei" ,


"Ei" ,



"E" ,
# 248 "../../gcc/gcc/rtl.def"
"eEee0" ,
# 259 "../../gcc/gcc/rtl.def"
"eee" ,
# 271 "../../gcc/gcc/rtl.def"
"ee" ,




"e" ,




"e" ,





"ee" ,



"" ,





"ee" ,




"i" ,






"w" ,




"ww" ,


"E" ,




"s" ,





"e" ,



"" ,


"0" ,
# 345 "../../gcc/gcc/rtl.def"
"i00" ,






"0" ,
# 362 "../../gcc/gcc/rtl.def"
"ei" ,
# 375 "../../gcc/gcc/rtl.def"
"e" ,





"ee" ,




"e0" ,





"u00" ,






"s00" ,






"" ,
# 418 "../../gcc/gcc/rtl.def"
"eee" ,


"ee" ,


"ee" ,


"ee" ,


"e" ,

"ee" ,


"ee" ,

"ee" ,


"ee" ,
"ee" ,


"ee" ,

"ee" ,

"ee" ,

"e" ,




"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,





"ee" ,
"ee" ,
"ee" ,
"ee" ,
# 477 "../../gcc/gcc/rtl.def"
"e" ,
"e" ,
"e" ,
"e" ,
# 494 "../../gcc/gcc/rtl.def"
"ee" ,
"ee" ,



"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,


"ee" ,
"ee" ,


"ee" ,
"ee" ,
"ee" ,
"ee" ,
"ee" ,


"ee" ,




"e" ,


"e" ,


"e" ,


"e" ,
"e" ,


"e" ,







"e" ,


"e" ,




"e" ,


"e" ,


"e" ,




"e" ,


"e" ,


"e" ,


"e" ,


"e" ,
# 590 "../../gcc/gcc/rtl.def"
"eee" ,


"eee" ,




"e" ,



"ee" ,






"eee" ,





"ee" ,




"ee" ,





"e" ,


"ee" ,


"ee" ,


"ee" ,


"ee" ,


"e" ,


"e" ,


"te" ,
# 355 "../../gcc/gcc/gengtype.c" 2

};

static int rtx_next_new[NUM_RTX_CODE];



enum insn_note {

# 1 "../../gcc/gcc/insn-notes.def" 1
# 36 "../../gcc/gcc/insn-notes.def"
NOTE_INSN_DELETED,


NOTE_INSN_DELETED_LABEL,



NOTE_INSN_BLOCK_BEG,
NOTE_INSN_BLOCK_END,


NOTE_INSN_LOOP_BEG,
NOTE_INSN_LOOP_END,




NOTE_INSN_FUNCTION_BEG,






NOTE_INSN_FUNCTION_END,


NOTE_INSN_PROLOGUE_END,


NOTE_INSN_EPILOGUE_BEG,



NOTE_INSN_EH_REGION_BEG,
NOTE_INSN_EH_REGION_END,





NOTE_INSN_REPEATED_LINE_NUMBER,


NOTE_INSN_VAR_LOCATION,



NOTE_INSN_EXPECTED_VALUE,




NOTE_INSN_BASIC_BLOCK,




NOTE_INSN_UNLIKELY_EXECUTED_CODE,
# 365 "../../gcc/gcc/gengtype.c" 2


  NOTE_INSN_MAX
};

static const char *const note_insn_name[NOTE_INSN_MAX] = {

# 1 "../../gcc/gcc/insn-notes.def" 1
# 36 "../../gcc/gcc/insn-notes.def"
"NOTE_INSN_DELETED",


"NOTE_INSN_DELETED_LABEL",



"NOTE_INSN_BLOCK_BEG",
"NOTE_INSN_BLOCK_END",


"NOTE_INSN_LOOP_BEG",
"NOTE_INSN_LOOP_END",




"NOTE_INSN_FUNCTION_BEG",






"NOTE_INSN_FUNCTION_END",


"NOTE_INSN_PROLOGUE_END",


"NOTE_INSN_EPILOGUE_BEG",



"NOTE_INSN_EH_REGION_BEG",
"NOTE_INSN_EH_REGION_END",





"NOTE_INSN_REPEATED_LINE_NUMBER",


"NOTE_INSN_VAR_LOCATION",



"NOTE_INSN_EXPECTED_VALUE",




"NOTE_INSN_BASIC_BLOCK",




"NOTE_INSN_UNLIKELY_EXECUTED_CODE",
# 373 "../../gcc/gcc/gengtype.c" 2

};







static void
gen_rtx_next (void)
{
  int i;
  for (i = 0; i < NUM_RTX_CODE; i++)
    {
      int k;

      rtx_next_new[i] = -1;
      if (strncmp (rtx_format[i], "iuu", 3) == 0)
 rtx_next_new[i] = 2;
      else if (i == COND_EXEC || i == SET || i == EXPR_LIST || i == INSN_LIST)
 rtx_next_new[i] = 1;
      else
 for (k = strlen (rtx_format[i]) - 1; k >= 0; k--)
   if (rtx_format[i][k] == 'e' || rtx_format[i][k] == 'u')
     rtx_next_new[i] = k;
    }
}


static void
write_rtx_next (void)
{
  outf_p f = get_output_file_with_visibility (((void *)0));
  int i;

  oprintf (f, "\n/* Used to implement the RTX_NEXT macro.  */\n");
  oprintf (f, "const unsigned char rtx_next[NUM_RTX_CODE] = {\n");
  for (i = 0; i < NUM_RTX_CODE; i++)
    if (rtx_next_new[i] == -1)
      oprintf (f, "  0,\n");
    else
      oprintf (f,
        "  RTX_HDR_SIZE + %d * sizeof (rtunion),\n",
        rtx_next_new[i]);
  oprintf (f, "};\n");
}





static type_p
adjust_field_rtx_def (type_p t, options_p opt __attribute__ ((__unused__)))
{
  pair_p flds = ((void *)0);
  options_p nodot;
  int i;
  type_p rtx_tp, rtvec_tp, tree_tp, mem_attrs_tp, note_union_tp, scalar_tp;
  type_p bitmap_tp, basic_block_tp, reg_attrs_tp;

  if (t->kind != TYPE_UNION)
    {
      error_at_line (&lexer_line,
       "special `rtx_def' must be applied to a union");
      return &string_type;
    }

  nodot = ((struct options *) xmalloc (sizeof (struct options)));
  nodot->next = ((void *)0);
  nodot->name = "dot";
  nodot->info = "";

  rtx_tp = create_pointer (find_structure ("rtx_def", 0));
  rtvec_tp = create_pointer (find_structure ("rtvec_def", 0));
  tree_tp = create_pointer (find_structure ("tree_node", 1));
  mem_attrs_tp = create_pointer (find_structure ("mem_attrs", 0));
  reg_attrs_tp = create_pointer (find_structure ("reg_attrs", 0));
  bitmap_tp = create_pointer (find_structure ("bitmap_element_def", 0));
  basic_block_tp = create_pointer (find_structure ("basic_block_def", 0));
  scalar_tp = create_scalar_type ("rtunion scalar", 14);

  {
    pair_p note_flds = ((void *)0);
    int c;

    for (c = 0; c <= NOTE_INSN_MAX; c++)
      {
 pair_p old_note_flds = note_flds;

 note_flds = ((struct pair *) xmalloc (sizeof (struct pair)));
 note_flds->line.file = "../../gcc/gcc/gengtype.c";
 note_flds->line.line = 465;
 note_flds->opt = ((struct options *) xmalloc (sizeof (struct options)));
 note_flds->opt->next = nodot;
 note_flds->opt->name = "tag";
 note_flds->opt->info = note_insn_name[c];
 note_flds->next = old_note_flds;

 switch (c)
   {


   case NOTE_INSN_MAX:
     note_flds->opt->name = "default";
     note_flds->name = "rt_str";
     note_flds->type = &string_type;
     break;

   case NOTE_INSN_BLOCK_BEG:
   case NOTE_INSN_BLOCK_END:
     note_flds->name = "rt_tree";
     note_flds->type = tree_tp;
     break;

   case NOTE_INSN_EXPECTED_VALUE:
   case NOTE_INSN_VAR_LOCATION:
     note_flds->name = "rt_rtx";
     note_flds->type = rtx_tp;
     break;

   default:
     note_flds->name = "rt_int";
     note_flds->type = scalar_tp;
     break;
   }
      }
    new_structure ("rtx_def_note_subunion", 1, &lexer_line, note_flds, ((void *)0));
  }

  note_union_tp = find_structure ("rtx_def_note_subunion", 1);

  for (i = 0; i < NUM_RTX_CODE; i++)
    {
      pair_p old_flds = flds;
      pair_p subfields = ((void *)0);
      size_t aindex, nmindex;
      const char *sname;
      char *ftag;

      for (aindex = 0; aindex < strlen (rtx_format[i]); aindex++)
 {
   pair_p old_subf = subfields;
   type_p t;
   const char *subname;

   switch (rtx_format[i][aindex])
     {
     case '*':
     case 'i':
     case 'n':
     case 'w':
       t = scalar_tp;
       subname = "rt_int";
       break;

     case '0':
       if (i == MEM && aindex == 1)
  t = mem_attrs_tp, subname = "rt_mem";
       else if (i == JUMP_INSN && aindex == 9)
  t = rtx_tp, subname = "rt_rtx";
       else if (i == CODE_LABEL && aindex == 4)
  t = scalar_tp, subname = "rt_int";
       else if (i == CODE_LABEL && aindex == 5)
  t = rtx_tp, subname = "rt_rtx";
       else if (i == LABEL_REF
         && (aindex == 1 || aindex == 2))
  t = rtx_tp, subname = "rt_rtx";
       else if (i == NOTE && aindex == 4)
  t = note_union_tp, subname = "";
       else if (i == NOTE && aindex >= 7)
  t = scalar_tp, subname = "rt_int";
       else if (i == ADDR_DIFF_VEC && aindex == 4)
  t = scalar_tp, subname = "rt_int";
       else if (i == VALUE && aindex == 0)
  t = scalar_tp, subname = "rt_int";
       else if (i == REG && aindex == 1)
  t = scalar_tp, subname = "rt_int";
       else if (i == REG && aindex == 2)
  t = reg_attrs_tp, subname = "rt_reg";
       else if (i == SCRATCH && aindex == 0)
  t = scalar_tp, subname = "rt_int";
       else if (i == SYMBOL_REF && aindex == 1)
  t = scalar_tp, subname = "rt_int";
       else if (i == SYMBOL_REF && aindex == 2)
  t = tree_tp, subname = "rt_tree";
       else if (i == BARRIER && aindex >= 3)
  t = scalar_tp, subname = "rt_int";
       else
  {
    error_at_line (&lexer_line,
   "rtx type `%s' has `0' in position %lu, can't handle",
     rtx_name[i], (unsigned long) aindex);
    t = &string_type;
    subname = "rt_int";
  }
       break;

     case 's':
     case 'S':
     case 'T':
       t = &string_type;
       subname = "rt_str";
       break;

     case 'e':
     case 'u':
       t = rtx_tp;
       subname = "rt_rtx";
       break;

     case 'E':
     case 'V':
       t = rtvec_tp;
       subname = "rt_rtvec";
       break;

     case 't':
       t = tree_tp;
       subname = "rt_tree";
       break;

     case 'b':
       t = bitmap_tp;
       subname = "rt_bit";
       break;

     case 'B':
       t = basic_block_tp;
       subname = "rt_bb";
       break;

     default:
       error_at_line (&lexer_line,
       "rtx type `%s' has `%c' in position %lu, can't handle",
        rtx_name[i], rtx_format[i][aindex],
        (unsigned long)aindex);
       t = &string_type;
       subname = "rt_int";
       break;
     }

   subfields = ((struct pair *) xmalloc (sizeof (struct pair)));
   subfields->next = old_subf;
   subfields->type = t;
   subfields->name = xasprintf (".fld[%lu].%s", (unsigned long)aindex,
           subname);
   subfields->line.file = "../../gcc/gcc/gengtype.c";
   subfields->line.line = 621;
   if (t == note_union_tp)
     {
       subfields->opt = ((struct options *) xmalloc (sizeof (struct options)));
       subfields->opt->next = nodot;
       subfields->opt->name = "desc";
       subfields->opt->info = "NOTE_LINE_NUMBER (&%0)";
     }
   else if (t == basic_block_tp)
     {

       subfields->opt = ((struct options *) xmalloc (sizeof (struct options)));
       subfields->opt->next = nodot;
       subfields->opt->name = "skip";
       subfields->opt->info = ((void *)0);
     }
   else
     subfields->opt = nodot;
 }

      flds = ((struct pair *) xmalloc (sizeof (struct pair)));
      flds->next = old_flds;
      flds->name = "";
      sname = xasprintf ("rtx_def_%s", rtx_name[i]);
      new_structure (sname, 0, &lexer_line, subfields, ((void *)0));
      flds->type = find_structure (sname, 0);
      flds->line.file = "../../gcc/gcc/gengtype.c";
      flds->line.line = 648;
      flds->opt = ((struct options *) xmalloc (sizeof (struct options)));
      flds->opt->next = nodot;
      flds->opt->name = "tag";
      ftag = xstrdup (rtx_name[i]);
      for (nmindex = 0; nmindex < strlen (ftag); nmindex++)
 ftag[nmindex] = _sch_toupper[(ftag[nmindex]) & 0xff];
      flds->opt->info = ftag;
    }

  new_structure ("rtx_def_subunion", 1, &lexer_line, flds, nodot);
  return find_structure ("rtx_def_subunion", 1);
}







static type_p
adjust_field_tree_exp (type_p t, options_p opt __attribute__ ((__unused__)))
{
  pair_p flds;
  options_p nodot;

  if (t->kind != TYPE_ARRAY)
    {
      error_at_line (&lexer_line,
       "special `tree_exp' must be applied to an array");
      return &string_type;
    }

  nodot = ((struct options *) xmalloc (sizeof (struct options)));
  nodot->next = ((void *)0);
  nodot->name = "dot";
  nodot->info = "";

  flds = ((struct pair *) xmalloc (sizeof (struct pair)));
  flds->next = ((void *)0);
  flds->name = "";
  flds->type = t;
  flds->line.file = "../../gcc/gcc/gengtype.c";
  flds->line.line = 691;
  flds->opt = ((struct options *) xmalloc (sizeof (struct options)));
  flds->opt->next = nodot;
  flds->opt->name = "length";
  flds->opt->info = "TREE_CODE_LENGTH (TREE_CODE ((tree) &%0))";
  {
    options_p oldopt = flds->opt;
    flds->opt = ((struct options *) xmalloc (sizeof (struct options)));
    flds->opt->next = oldopt;
    flds->opt->name = "default";
    flds->opt->info = "";
  }

  new_structure ("tree_exp_subunion", 1, &lexer_line, flds, nodot);
  return find_structure ("tree_exp_subunion", 1);
}
# 718 "../../gcc/gcc/gengtype.c"
type_p
adjust_field_type (type_p t, options_p opt)
{
  int length_p = 0;
  const int pointer_p = t->kind == TYPE_POINTER;
  type_p params[10];
  int params_p = 0;
  int i;

  for (i = 0; i < 10; i++)
    params[i] = ((void *)0);

  for (; opt; opt = opt->next)
    if (strcmp (opt->name, "length") == 0)
      length_p = 1;
    else if (strcmp (opt->name, "param_is") == 0
      || (strncmp (opt->name, "param", 5) == 0
   && (_sch_istable[(opt->name[5]) & 0xff] & (unsigned short)(_sch_isdigit))
   && strcmp (opt->name + 6, "_is") == 0))
      {
 int num = (_sch_istable[(opt->name[5]) & 0xff] & (unsigned short)(_sch_isdigit)) ? opt->name[5] - '0' : 0;

 if (! ((t)->kind == TYPE_UNION || (t)->kind == TYPE_STRUCT || (t)->kind == TYPE_LANG_STRUCT)
     && (t->kind != TYPE_POINTER || ! ((t->u.p)->kind == TYPE_UNION || (t->u.p)->kind == TYPE_STRUCT || (t->u.p)->kind == TYPE_LANG_STRUCT)))
   {
     error_at_line (&lexer_line,
   "option `%s' may only be applied to structures or structure pointers",
      opt->name);
     return t;
   }

 params_p = 1;
 if (params[num] != ((void *)0))
   error_at_line (&lexer_line, "duplicate `%s' option", opt->name);
 if (! (_sch_istable[(opt->name[5]) & 0xff] & (unsigned short)(_sch_isdigit)))
   params[num] = create_pointer ((type_p) opt->info);
 else
   params[num] = (type_p) opt->info;
      }
    else if (strcmp (opt->name, "special") == 0)
      {
 const char *special_name = opt->info;
 if (strcmp (special_name, "tree_exp") == 0)
   t = adjust_field_tree_exp (t, opt);
 else if (strcmp (special_name, "rtx_def") == 0)
   t = adjust_field_rtx_def (t, opt);
 else
   error_at_line (&lexer_line, "unknown special `%s'", special_name);
      }

  if (params_p)
    {
      type_p realt;

      if (pointer_p)
 t = t->u.p;
      realt = find_param_structure (t, params);
      t = pointer_p ? create_pointer (realt) : realt;
    }

  if (! length_p
      && pointer_p
      && t->u.p->kind == TYPE_SCALAR
      && (strcmp (t->u.p->u.sc, "char") == 0
   || strcmp (t->u.p->u.sc, "unsigned char") == 0))
    return &string_type;
  if (t->kind == TYPE_ARRAY && t->u.a.p->kind == TYPE_POINTER
      && t->u.a.p->u.p->kind == TYPE_SCALAR
      && (strcmp (t->u.a.p->u.p->u.sc, "char") == 0
   || strcmp (t->u.a.p->u.p->u.sc, "unsigned char") == 0))
    return create_array (&string_type, t->u.a.len);

  return t;
}





void
note_yacc_type (options_p o, pair_p fields, pair_p typeinfo,
  struct fileloc *pos)
{
  pair_p p;
  pair_p *p_p;

  for (p = typeinfo; p; p = p->next)
    {
      pair_p m;

      if (p->name == ((void *)0))
 continue;

      if (p->type == (type_p) 1)
 {
   pair_p pp;
   int ok = 0;

   for (pp = typeinfo; pp; pp = pp->next)
     if (pp->type != (type_p) 1
  && strcmp (pp->opt->info, p->opt->info) == 0)
       {
  ok = 1;
  break;
       }
   if (! ok)
     continue;
 }

      for (m = fields; m; m = m->next)
 if (strcmp (m->name, p->name) == 0)
   p->type = m->type;
      if (p->type == ((void *)0))
 {
   error_at_line (&p->line,
    "couldn't match fieldname `%s'", p->name);
   p->name = ((void *)0);
 }
    }

  p_p = &typeinfo;
  while (*p_p)
    {
      pair_p p = *p_p;

      if (p->name == ((void *)0)
   || p->type == (type_p) 1)
 *p_p = p->next;
      else
 p_p = &p->next;
    }

  new_structure ("yy_union", 1, pos, typeinfo, o);
  do_typedef ("YYSTYPE", find_structure ("yy_union", 1), pos);
}

static void process_gc_options (options_p, enum gc_used_enum,
    int *, int *, int *, type_p *);
static void set_gc_used_type (type_p, enum gc_used_enum, type_p *);
static void set_gc_used (pair_p);



static void
process_gc_options (options_p opt, enum gc_used_enum level, int *maybe_undef,
      int *pass_param, int *length, type_p *nested_ptr)
{
  options_p o;
  for (o = opt; o; o = o->next)
    if (strcmp (o->name, "ptr_alias") == 0 && level == GC_POINTED_TO)
      set_gc_used_type ((type_p) o->info, GC_POINTED_TO, ((void *)0));
    else if (strcmp (o->name, "maybe_undef") == 0)
      *maybe_undef = 1;
    else if (strcmp (o->name, "use_params") == 0)
      *pass_param = 1;
    else if (strcmp (o->name, "length") == 0)
      *length = 1;
    else if (strcmp (o->name, "nested_ptr") == 0)
      *nested_ptr = ((const struct nested_ptr_data *) o->info)->type;
}



static void
set_gc_used_type (type_p t, enum gc_used_enum level, type_p param[10])
{
  if (t->gc_used >= level)
    return;

  t->gc_used = level;

  switch (t->kind)
    {
    case TYPE_STRUCT:
    case TYPE_UNION:
      {
 pair_p f;
 int dummy;
 type_p dummy2;

 process_gc_options (t->u.s.opt, level, &dummy, &dummy, &dummy,
       &dummy2);

 for (f = t->u.s.fields; f; f = f->next)
   {
     int maybe_undef = 0;
     int pass_param = 0;
     int length = 0;
     type_p nested_ptr = ((void *)0);
     process_gc_options (f->opt, level, &maybe_undef, &pass_param,
    &length, &nested_ptr);

     if (nested_ptr && f->type->kind == TYPE_POINTER)
       set_gc_used_type (nested_ptr, GC_POINTED_TO,
    pass_param ? param : ((void *)0));
     else if (length && f->type->kind == TYPE_POINTER)
       set_gc_used_type (f->type->u.p, GC_USED, ((void *)0));
     else if (maybe_undef && f->type->kind == TYPE_POINTER)
       set_gc_used_type (f->type->u.p, GC_MAYBE_POINTED_TO, ((void *)0));
     else if (pass_param && f->type->kind == TYPE_POINTER && param)
       set_gc_used_type (find_param_structure (f->type->u.p, param),
    GC_POINTED_TO, ((void *)0));
     else
       set_gc_used_type (f->type, GC_USED, pass_param ? param : ((void *)0));
   }
 break;
      }

    case TYPE_POINTER:
      set_gc_used_type (t->u.p, GC_POINTED_TO, ((void *)0));
      break;

    case TYPE_ARRAY:
      set_gc_used_type (t->u.a.p, GC_USED, param);
      break;

    case TYPE_LANG_STRUCT:
      for (t = t->u.s.lang_struct; t; t = t->next)
 set_gc_used_type (t, level, param);
      break;

    case TYPE_PARAM_STRUCT:
      {
 int i;
 for (i = 0; i < 10; i++)
   if (t->u.param_struct.param[i] != 0)
     set_gc_used_type (t->u.param_struct.param[i], GC_USED, ((void *)0));
      }
      if (t->u.param_struct.stru->gc_used == GC_POINTED_TO)
 level = GC_POINTED_TO;
      else
 level = GC_USED;
      t->u.param_struct.stru->gc_used = GC_UNUSED;
      set_gc_used_type (t->u.param_struct.stru, level,
   t->u.param_struct.param);
      break;

    default:
      break;
    }
}



static void
set_gc_used (pair_p variables)
{
  pair_p p;
  for (p = variables; p; p = p->next)
    set_gc_used_type (p->type, GC_USED, ((void *)0));
}






static outf_p output_files;



static outf_p header_file;
# 988 "../../gcc/gcc/gengtype.c"
static int srcdir_len = 0;


outf_p base_files[((sizeof (lang_dir_names) / sizeof ((lang_dir_names)[0])) - 1)];

static outf_p create_file (const char *, const char *);
static const char * get_file_basename (const char *);




static outf_p
create_file (const char *name, const char *oname)
{
  static const char *const hdr[] = {
    "   Copyright (C) 2004 Free Software Foundation, Inc.\n",
    "\n",
    "This file is part of GCC.\n",
    "\n",
    "GCC is free software; you can redistribute it and/or modify it under\n",
    "the terms of the GNU General Public License as published by the Free\n",
    "Software Foundation; either version 2, or (at your option) any later\n",
    "version.\n",
    "\n",
    "GCC is distributed in the hope that it will be useful, but WITHOUT ANY\n",
    "WARRANTY; without even the implied warranty of MERCHANTABILITY or\n",
    "FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\n",
    "for more details.\n",
    "\n",
    "You should have received a copy of the GNU General Public License\n",
    "along with GCC; see the file COPYING.  If not, write to the Free\n",
    "Software Foundation, 59 Temple Place - Suite 330, Boston, MA\n",
    "02111-1307, USA.  */\n",
    "\n",
    "/* This file is machine generated.  Do not edit.  */\n"
  };
  outf_p f;
  size_t i;

  f = ((struct outf *) xcalloc (1, sizeof (struct outf)));
  f->next = output_files;
  f->name = oname;
  output_files = f;

  oprintf (f, "/* Type information for %s.\n", name);
  for (i = 0; i < (sizeof (hdr) / sizeof ((hdr)[0])); i++)
    oprintf (f, "%s", hdr[i]);
  return f;
}


void
oprintf (outf_p o, const char *format, ...)
{
  char *s;
  size_t slength;
  va_list ap;

  __builtin_va_start(ap,format);
  slength = xvasprintf (&s, format, ap);

  if (o->bufused + slength > o->buflength)
    {
      size_t new_len = o->buflength;
      if (new_len == 0)
 new_len = 1024;
      do {
 new_len *= 2;
      } while (o->bufused + slength >= new_len);
      o->buf = ((char *) xrealloc ((void *) (o->buf), sizeof (char) * (new_len)));
      o->buflength = new_len;
    }
  memcpy (o->buf + o->bufused, s, slength);
  o->bufused += slength;
  free (s);
  __builtin_va_end(ap);
}



static void
open_base_files (void)
{
  size_t i;

  header_file = create_file ("GCC", "gtype-desc.h");

  for (i = 0; i < ((sizeof (lang_dir_names) / sizeof ((lang_dir_names)[0])) - 1); i++)
    base_files[i] = create_file (lang_dir_names[i],
     xasprintf ("gtype-%s.h", lang_dir_names[i]));


  {

    static const char *const ifiles [] = {
      "config.h", "system.h", "coretypes.h", "tm.h", "varray.h",
      "hashtab.h", "splay-tree.h", "bitmap.h", "input.h", "tree.h", "rtl.h",
      "function.h", "insn-config.h", "expr.h", "hard-reg-set.h",
      "basic-block.h", "cselib.h", "insn-addr.h", "optabs.h",
      "libfuncs.h", "debug.h", "ggc.h", "cgraph.h",
      "tree-flow.h", "reload.h",
      "cpp-id-data.h",
      "tree-chrec.h",
      ((void *)0)
    };
    const char *const *ifp;
    outf_p gtype_desc_c;

    gtype_desc_c = create_file ("GCC", "gtype-desc.c");
    for (ifp = ifiles; *ifp; ifp++)
      oprintf (gtype_desc_c, "#include \"%s\"\n", *ifp);
  }
}



static const char *
get_file_basename (const char *f)
{
  const char *basename;
  unsigned i;

  basename = strrchr (f, '/');

  if (!basename)
    return f;

  basename++;

  for (i = 1; i < ((sizeof (lang_dir_names) / sizeof ((lang_dir_names)[0])) - 1); i++)
    {
      const char * s1;
      const char * s2;
      int l1;
      int l2;
      s1 = basename - strlen (lang_dir_names [i]) - 1;
      s2 = lang_dir_names [i];
      l1 = strlen (s1);
      l2 = strlen (s2);
      if (l1 >= l2 && ((s1[-1]) == '/') && !memcmp (s1, s2, l2))
        {
          basename -= l2 + 1;
          if ((basename - f - 1) != srcdir_len)
     fatal ("filename `%s' should be preceded by $srcdir", f);
          break;
        }
    }

  return basename;
}
# 1147 "../../gcc/gcc/gengtype.c"
unsigned
get_base_file_bitmap (const char *input_file)
{
  const char *basename = get_file_basename (input_file);
  const char *slashpos = strchr (basename, '/');
  unsigned j;
  unsigned k;
  unsigned bitmap;





  if (slashpos)
    {
      size_t i;
      for (i = 1; i < ((sizeof (lang_dir_names) / sizeof ((lang_dir_names)[0])) - 1); i++)
 if ((size_t)(slashpos - basename) == strlen (lang_dir_names [i])
     && memcmp (basename, lang_dir_names[i], strlen (lang_dir_names[i])) == 0)
          {

            bitmap = 1 << i;
          }
    }




  bitmap = 0;

  for (j = 0; j < ((sizeof (lang_files) / sizeof ((lang_files)[0])) - 1); j++)
    {
      if (!strcmp(input_file, lang_files[j]))
        {
          for (k = 0; k < ((sizeof (lang_dir_names) / sizeof ((lang_dir_names)[0])) - 1); k++)
            {
              if (!strcmp(lang_dir_names[k], langs_for_lang_files[j]))
                bitmap |= (1 << k);
            }
        }
    }


  if (!bitmap)
    bitmap = (1 << ((sizeof (lang_dir_names) / sizeof ((lang_dir_names)[0])) - 1)) - 1;

  return bitmap;
}





outf_p
get_output_file_with_visibility (const char *input_file)
{
  outf_p r;
  size_t len;
  const char *basename;
  const char *for_name;
  const char *output_name;




  if (input_file == ((void *)0))
    input_file = "system.h";


  basename = get_file_basename (input_file);

  len = strlen (basename);
  if ((len > 2 && memcmp (basename+len-2, ".c", 2) == 0)
      || (len > 2 && memcmp (basename+len-2, ".y", 2) == 0)
      || (len > 3 && memcmp (basename+len-3, ".in", 3) == 0))
    {
      char *s;

      output_name = s = xasprintf ("gt-%s", basename);
      for (; *s != '.'; s++)
 if (! (_sch_istable[(*s) & 0xff] & (unsigned short)(_sch_isalnum)) && *s != '-')
   *s = '-';
      memcpy (s, ".h", sizeof (".h"));
      for_name = basename;
    }





  else if (strcmp (basename, "c-common.h") == 0)
    output_name = "gt-c-common.h", for_name = "c-common.c";
  else if (strcmp (basename, "c-tree.h") == 0)
    output_name = "gt-c-decl.h", for_name = "c-decl.c";
  else if (strncmp (basename, "objc", 4) == 0 && ((basename[4]) == '/')
    && strcmp (basename + 5, "objc-act.h") == 0)
    output_name = "gt-objc-objc-act.h", for_name = "objc/objc-act.c";
  else
    {
      size_t i;

      for (i = 0; i < ((sizeof (lang_dir_names) / sizeof ((lang_dir_names)[0])) - 1); i++)
 if (memcmp (basename, lang_dir_names[i], strlen (lang_dir_names[i])) == 0
     && basename[strlen(lang_dir_names[i])] == '/')
   return base_files[i];

      output_name = "gtype-desc.c";
      for_name = ((void *)0);
    }


  for (r = output_files; r; r = r->next)
    if (strcmp (r->name, output_name) == 0)
      return r;


  r = create_file (for_name, output_name);

  return r;
}





const char *
get_output_file_name (const char *input_file)
{
  return get_output_file_with_visibility (input_file)->name;
}




static void
close_output_files (void)
{
  outf_p of;

  for (of = output_files; of; of = of->next)
    {
      FILE * newfile;

      newfile = fopen (of->name, "r");
      if (newfile != ((void *)0) )
 {
   int no_write_p;
   size_t i;

   for (i = 0; i < of->bufused; i++)
     {
       int ch;
       ch = fgetc (newfile);
       if (ch == (-1) || ch != (unsigned char) of->buf[i])
  break;
     }
   no_write_p = i == of->bufused && fgetc (newfile) == (-1);
   fclose (newfile);

   if (no_write_p)
     continue;
 }

      newfile = fopen (of->name, "w");
      if (newfile == ((void *)0))
 {
   perror ("opening output file");
   exit (1);
 }
      if (fwrite_unlocked (of->buf, 1, of->bufused, newfile) != of->bufused)
 {
   perror ("writing output file");
   exit (1);
 }
      if (fclose (newfile) != 0)
 {
   perror ("closing output file");
   exit (1);
 }
    }
}

struct flist {
  struct flist *next;
  int started_p;
  const char *name;
  outf_p f;
};

struct walk_type_data;





typedef void (*process_field_fn)
     (type_p f, const struct walk_type_data *p);
typedef void (*func_name_fn)
     (type_p s, const struct walk_type_data *p);



struct write_types_data
{
  const char *prefix;
  const char *param_prefix;
  const char *subfield_marker_routine;
  const char *marker_routine;
  const char *reorder_note_routine;
  const char *comment;
};

static void output_escaped_param (struct walk_type_data *d,
      const char *, const char *);
static void output_mangled_typename (outf_p, type_p);
static void walk_type (type_p t, struct walk_type_data *d);
static void write_func_for_structure
     (type_p orig_s, type_p s, type_p * param,
      const struct write_types_data *wtd);
static void write_types_process_field
     (type_p f, const struct walk_type_data *d);
static void write_types (type_p structures,
    type_p param_structs,
    const struct write_types_data *wtd);
static void write_types_local_process_field
     (type_p f, const struct walk_type_data *d);
static void write_local_func_for_structure
     (type_p orig_s, type_p s, type_p * param);
static void write_local (type_p structures,
    type_p param_structs);
static void write_enum_defn (type_p structures, type_p param_structs);
static int contains_scalar_p (type_p t);
static void put_mangled_filename (outf_p , const char *);
static void finish_root_table (struct flist *flp, const char *pfx,
          const char *tname, const char *lastname,
          const char *name);
static void write_root (outf_p , pair_p, type_p, const char *, int,
   struct fileloc *, const char *);
static void write_array (outf_p f, pair_p v,
    const struct write_types_data *wtd);
static void write_roots (pair_p);



struct walk_type_data
{
  process_field_fn process_field;
  const void *cookie;
  outf_p of;
  options_p opt;
  const char *val;
  const char *prev_val[4];
  int indent;
  int counter;
  struct fileloc *line;
  lang_bitmap bitmap;
  type_p *param;
  int used_length;
  type_p orig_s;
  const char *reorder_fn;
  unsigned char needs_cast_p;
  unsigned char fn_wants_lvalue;
};



static void
output_mangled_typename (outf_p of, type_p t)
{
  if (t == ((void *)0))
    oprintf (of, "Z");
  else switch (t->kind)
    {
    case TYPE_POINTER:
      oprintf (of, "P");
      output_mangled_typename (of, t->u.p);
      break;
    case TYPE_SCALAR:
      oprintf (of, "I");
      break;
    case TYPE_STRING:
      oprintf (of, "S");
      break;
    case TYPE_STRUCT:
    case TYPE_UNION:
    case TYPE_LANG_STRUCT:
      oprintf (of, "%lu%s", (unsigned long) strlen (t->u.s.tag), t->u.s.tag);
      break;
    case TYPE_PARAM_STRUCT:
      {
 int i;
 for (i = 0; i < 10; i++)
   if (t->u.param_struct.param[i] != ((void *)0))
     output_mangled_typename (of, t->u.param_struct.param[i]);
 output_mangled_typename (of, t->u.param_struct.stru);
      }
      break;
    case TYPE_ARRAY:
      (fancy_abort ("../../gcc/gcc/gengtype.c", 1445, __FUNCTION__));
    }
}






static void
output_escaped_param (struct walk_type_data *d, const char *param,
        const char *oname)
{
  const char *p;

  for (p = param; *p; p++)
    if (*p != '%')
      oprintf (d->of, "%c", *p);
    else switch (*++p)
      {
      case 'h':
 oprintf (d->of, "(%s)", d->prev_val[2]);
 break;
      case '0':
 oprintf (d->of, "(%s)", d->prev_val[0]);
 break;
      case '1':
 oprintf (d->of, "(%s)", d->prev_val[1]);
 break;
      case 'a':
 {
   const char *pp = d->val + strlen (d->val);
   while (pp[-1] == ']')
     while (*pp != '[')
       pp--;
   oprintf (d->of, "%s", pp);
 }
 break;
      default:
 error_at_line (d->line, "`%s' option contains bad escape %c%c",
         oname, '%', *p);
      }
}
# 1500 "../../gcc/gcc/gengtype.c"
static void
walk_type (type_p t, struct walk_type_data *d)
{
  const char *length = ((void *)0);
  const char *desc = ((void *)0);
  int maybe_undef_p = 0;
  int use_param_num = -1;
  int use_params_p = 0;
  options_p oo;
  const struct nested_ptr_data *nested_ptr_d = ((void *)0);

  d->needs_cast_p = 0;
  for (oo = d->opt; oo; oo = oo->next)
    if (strcmp (oo->name, "length") == 0)
      length = oo->info;
    else if (strcmp (oo->name, "maybe_undef") == 0)
      maybe_undef_p = 1;
    else if (strncmp (oo->name, "use_param", 9) == 0
      && (oo->name[9] == '\0' || (_sch_istable[(oo->name[9]) & 0xff] & (unsigned short)(_sch_isdigit))))
      use_param_num = oo->name[9] == '\0' ? 0 : oo->name[9] - '0';
    else if (strcmp (oo->name, "use_params") == 0)
      use_params_p = 1;
    else if (strcmp (oo->name, "desc") == 0)
      desc = oo->info;
    else if (strcmp (oo->name, "nested_ptr") == 0)
      nested_ptr_d = (const struct nested_ptr_data *) oo->info;
    else if (strcmp (oo->name, "dot") == 0)
      ;
    else if (strcmp (oo->name, "tag") == 0)
      ;
    else if (strcmp (oo->name, "special") == 0)
      ;
    else if (strcmp (oo->name, "skip") == 0)
      ;
    else if (strcmp (oo->name, "default") == 0)
      ;
    else if (strcmp (oo->name, "descbits") == 0)
      ;
    else if (strcmp (oo->name, "param_is") == 0)
      ;
    else if (strncmp (oo->name, "param", 5) == 0
      && (_sch_istable[(oo->name[5]) & 0xff] & (unsigned short)(_sch_isdigit))
      && strcmp (oo->name + 6, "_is") == 0)
      ;
    else if (strcmp (oo->name, "chain_next") == 0)
      ;
    else if (strcmp (oo->name, "chain_prev") == 0)
      ;
    else if (strcmp (oo->name, "reorder") == 0)
      ;
    else
      error_at_line (d->line, "unknown option `%s'\n", oo->name);

  if (d->used_length)
    length = ((void *)0);

  if (use_params_p)
    {
      int pointer_p = t->kind == TYPE_POINTER;

      if (pointer_p)
 t = t->u.p;
      if (! ((t)->kind == TYPE_UNION || (t)->kind == TYPE_STRUCT || (t)->kind == TYPE_LANG_STRUCT))
 error_at_line (d->line, "`use_params' option on unimplemented type");
      else
 t = find_param_structure (t, d->param);
      if (pointer_p)
 t = create_pointer (t);
    }

  if (use_param_num != -1)
    {
      if (d->param != ((void *)0) && d->param[use_param_num] != ((void *)0))
 {
   type_p nt = d->param[use_param_num];

   if (t->kind == TYPE_ARRAY)
     nt = create_array (nt, t->u.a.len);
   else if (length != ((void *)0) && t->kind == TYPE_POINTER)
     nt = create_pointer (nt);
   d->needs_cast_p = (t->kind != TYPE_POINTER
        && (nt->kind == TYPE_POINTER
     || nt->kind == TYPE_STRING));
   t = nt;
 }
      else
 error_at_line (d->line, "no parameter defined for `%s'",
         d->val);
    }

  if (maybe_undef_p
      && (t->kind != TYPE_POINTER || ! ((t->u.p)->kind == TYPE_UNION || (t->u.p)->kind == TYPE_STRUCT || (t->u.p)->kind == TYPE_LANG_STRUCT)))
    {
      error_at_line (d->line,
       "field `%s' has invalid option `maybe_undef_p'\n",
       d->val);
      return;
    }

  switch (t->kind)
    {
    case TYPE_SCALAR:
    case TYPE_STRING:
      d->process_field (t, d);
      break;

    case TYPE_POINTER:
      {
 if (maybe_undef_p
     && t->u.p->u.s.line.file == ((void *)0))
   {
     oprintf (d->of, "%*sgcc_assert (!%s);\n", d->indent, "", d->val);
     break;
   }

 if (! length)
   {
     if (! ((t->u.p)->kind == TYPE_UNION || (t->u.p)->kind == TYPE_STRUCT || (t->u.p)->kind == TYPE_LANG_STRUCT)
  && t->u.p->kind != TYPE_PARAM_STRUCT)
       {
  error_at_line (d->line,
          "field `%s' is pointer to unimplemented type",
          d->val);
  break;
       }

     if (nested_ptr_d)
       {
  const char *oldprevval2 = d->prev_val[2];

  if (! ((nested_ptr_d->type)->kind == TYPE_UNION || (nested_ptr_d->type)->kind == TYPE_STRUCT || (nested_ptr_d->type)->kind == TYPE_LANG_STRUCT))
    {
      error_at_line (d->line,
       "field `%s' has invalid "
       "option `nested_ptr'\n",
       d->val);
      return;
    }

  d->prev_val[2] = d->val;
  oprintf (d->of, "%*s{\n", d->indent, "");
  d->indent += 2;
  d->val = xasprintf ("x%d", d->counter++);
  oprintf (d->of, "%*s%s %s * %s%s =\n", d->indent, "",
    (nested_ptr_d->type->kind == TYPE_UNION
     ? "union" : "struct"),
    nested_ptr_d->type->u.s.tag,
    d->fn_wants_lvalue ? "" : "const ",
    d->val);
  oprintf (d->of, "%*s", d->indent + 2, "");
  output_escaped_param (d, nested_ptr_d->convert_from,
          "nested_ptr");
  oprintf (d->of, ";\n");

  d->process_field (nested_ptr_d->type, d);

  if (d->fn_wants_lvalue)
    {
      oprintf (d->of, "%*s%s = ", d->indent, "",
        d->prev_val[2]);
      d->prev_val[2] = d->val;
      output_escaped_param (d, nested_ptr_d->convert_to,
       "nested_ptr");
      oprintf (d->of, ";\n");
    }

  d->indent -= 2;
  oprintf (d->of, "%*s}\n", d->indent, "");
  d->val = d->prev_val[2];
  d->prev_val[2] = oldprevval2;
       }
     else
       d->process_field (t->u.p, d);
   }
 else
   {
     int loopcounter = d->counter++;
     const char *oldval = d->val;
     const char *oldprevval3 = d->prev_val[3];
     char *newval;

     oprintf (d->of, "%*sif (%s != NULL) {\n", d->indent, "", d->val);
     d->indent += 2;
     oprintf (d->of, "%*ssize_t i%d;\n", d->indent, "", loopcounter);
     oprintf (d->of, "%*sfor (i%d = 0; i%d < (size_t)(", d->indent, "",
       loopcounter, loopcounter);
     output_escaped_param (d, length, "length");
     oprintf (d->of, "); i%d++) {\n", loopcounter);
     d->indent += 2;
     d->val = newval = xasprintf ("%s[i%d]", oldval, loopcounter);
     d->used_length = 1;
     d->prev_val[3] = oldval;
     walk_type (t->u.p, d);
     free (newval);
     d->val = oldval;
     d->prev_val[3] = oldprevval3;
     d->used_length = 0;
     d->indent -= 2;
     oprintf (d->of, "%*s}\n", d->indent, "");
     d->process_field(t, d);
     d->indent -= 2;
     oprintf (d->of, "%*s}\n", d->indent, "");
   }
      }
      break;

    case TYPE_ARRAY:
      {
 int loopcounter = d->counter++;
 const char *oldval = d->val;
 char *newval;



 if (t->u.a.p->kind == TYPE_SCALAR)
   break;

 oprintf (d->of, "%*s{\n", d->indent, "");
 d->indent += 2;
 oprintf (d->of, "%*ssize_t i%d;\n", d->indent, "", loopcounter);
 oprintf (d->of, "%*sfor (i%d = 0; i%d < (size_t)(", d->indent, "",
   loopcounter, loopcounter);
 if (length)
   output_escaped_param (d, length, "length");
 else
   oprintf (d->of, "%s", t->u.a.len);
 oprintf (d->of, "); i%d++) {\n", loopcounter);
 d->indent += 2;
 d->val = newval = xasprintf ("%s[i%d]", oldval, loopcounter);
 d->used_length = 1;
 walk_type (t->u.a.p, d);
 free (newval);
 d->used_length = 0;
 d->val = oldval;
 d->indent -= 2;
 oprintf (d->of, "%*s}\n", d->indent, "");
 d->indent -= 2;
 oprintf (d->of, "%*s}\n", d->indent, "");
      }
      break;

    case TYPE_STRUCT:
    case TYPE_UNION:
      {
 pair_p f;
 const char *oldval = d->val;
 const char *oldprevval1 = d->prev_val[1];
 const char *oldprevval2 = d->prev_val[2];
 const int union_p = t->kind == TYPE_UNION;
 int seen_default_p = 0;
 options_p o;

 if (! t->u.s.line.file)
   error_at_line (d->line, "incomplete structure `%s'", t->u.s.tag);

 if ((d->bitmap & t->u.s.bitmap) != d->bitmap)
   {
     error_at_line (d->line,
      "structure `%s' defined for mismatching languages",
      t->u.s.tag);
     error_at_line (&t->u.s.line, "one structure defined here");
   }


 for (o = t->u.s.opt; o; o = o->next)
   if (! desc && strcmp (o->name, "desc") == 0)
     desc = o->info;

 d->prev_val[2] = oldval;
 d->prev_val[1] = oldprevval2;
 if (union_p)
   {
     if (desc == ((void *)0))
       {
  error_at_line (d->line, "missing `desc' option for union `%s'",
          t->u.s.tag);
  desc = "1";
       }
     oprintf (d->of, "%*sswitch (", d->indent, "");
     output_escaped_param (d, desc, "desc");
     oprintf (d->of, ")\n");
     d->indent += 2;
     oprintf (d->of, "%*s{\n", d->indent, "");
   }
 for (f = t->u.s.fields; f; f = f->next)
   {
     options_p oo;
     const char *dot = ".";
     const char *tagid = ((void *)0);
     int skip_p = 0;
     int default_p = 0;
     int use_param_p = 0;
     char *newval;

     d->reorder_fn = ((void *)0);
     for (oo = f->opt; oo; oo = oo->next)
       if (strcmp (oo->name, "dot") == 0)
  dot = oo->info;
       else if (strcmp (oo->name, "tag") == 0)
  tagid = oo->info;
       else if (strcmp (oo->name, "skip") == 0)
  skip_p = 1;
       else if (strcmp (oo->name, "default") == 0)
  default_p = 1;
       else if (strcmp (oo->name, "reorder") == 0)
  d->reorder_fn = oo->info;
       else if (strncmp (oo->name, "use_param", 9) == 0
         && (oo->name[9] == '\0' || (_sch_istable[(oo->name[9]) & 0xff] & (unsigned short)(_sch_isdigit))))
  use_param_p = 1;

     if (skip_p)
       continue;

     if (union_p && tagid)
       {
  oprintf (d->of, "%*scase %s:\n", d->indent, "", tagid);
  d->indent += 2;
       }
     else if (union_p && default_p)
       {
  oprintf (d->of, "%*sdefault:\n", d->indent, "");
  d->indent += 2;
  seen_default_p = 1;
       }
     else if (! union_p && (default_p || tagid))
       error_at_line (d->line,
        "can't use `%s' outside a union on field `%s'",
        default_p ? "default" : "tag", f->name);
     else if (union_p && ! (default_p || tagid)
       && f->type->kind == TYPE_SCALAR)
       {
  fprintf (stderr,
 "%s:%d: warning: field `%s' is missing `tag' or `default' option\n",
    d->line->file, d->line->line, f->name);
  continue;
       }
     else if (union_p && ! (default_p || tagid))
       error_at_line (d->line,
        "field `%s' is missing `tag' or `default' option",
        f->name);

     d->line = &f->line;
     d->val = newval = xasprintf ("%s%s%s", oldval, dot, f->name);
     d->opt = f->opt;
     d->used_length = 0;

     if (union_p && use_param_p && d->param == ((void *)0))
       oprintf (d->of, "%*sgcc_unreachable ();\n", d->indent, "");
     else
       walk_type (f->type, d);

     free (newval);

     if (union_p)
       {
  oprintf (d->of, "%*sbreak;\n", d->indent, "");
  d->indent -= 2;
       }
   }
 d->reorder_fn = ((void *)0);

 d->val = oldval;
 d->prev_val[1] = oldprevval1;
 d->prev_val[2] = oldprevval2;

 if (union_p && ! seen_default_p)
   {
     oprintf (d->of, "%*sdefault:\n", d->indent, "");
     oprintf (d->of, "%*s  break;\n", d->indent, "");
   }
 if (union_p)
   {
     oprintf (d->of, "%*s}\n", d->indent, "");
     d->indent -= 2;
   }
      }
      break;

    case TYPE_LANG_STRUCT:
      {
 type_p nt;
 for (nt = t->u.s.lang_struct; nt; nt = nt->next)
   if ((d->bitmap & nt->u.s.bitmap) == d->bitmap)
     break;
 if (nt == ((void *)0))
   error_at_line (d->line, "structure `%s' differs between languages",
    t->u.s.tag);
 else
   walk_type (nt, d);
      }
      break;

    case TYPE_PARAM_STRUCT:
      {
 type_p *oldparam = d->param;

 d->param = t->u.param_struct.param;
 walk_type (t->u.param_struct.stru, d);
 d->param = oldparam;
      }
      break;

    default:
      (fancy_abort ("../../gcc/gcc/gengtype.c", 1903, __FUNCTION__));
    }
}



static void
write_types_process_field (type_p f, const struct walk_type_data *d)
{
  const struct write_types_data *wtd;
  const char *cast = d->needs_cast_p ? "(void *)" : "";
  wtd = (const struct write_types_data *) d->cookie;

  switch (f->kind)
    {
    case TYPE_POINTER:
      oprintf (d->of, "%*s%s (%s%s", d->indent, "",
        wtd->subfield_marker_routine, cast, d->val);
      if (wtd->param_prefix)
 {
   oprintf (d->of, ", %s", d->prev_val[3]);
   if (d->orig_s)
     {
       oprintf (d->of, ", gt_%s_", wtd->param_prefix);
       output_mangled_typename (d->of, d->orig_s);
     }
   else
     oprintf (d->of, ", gt_%sa_%s", wtd->param_prefix, d->prev_val[0]);
 }
      oprintf (d->of, ");\n");
      if (d->reorder_fn && wtd->reorder_note_routine)
 oprintf (d->of, "%*s%s (%s%s, %s, %s);\n", d->indent, "",
   wtd->reorder_note_routine, cast, d->val,
   d->prev_val[3], d->reorder_fn);
      break;

    case TYPE_STRING:
      if (wtd->param_prefix == ((void *)0))
 break;

    case TYPE_STRUCT:
    case TYPE_UNION:
    case TYPE_LANG_STRUCT:
    case TYPE_PARAM_STRUCT:
      oprintf (d->of, "%*sgt_%s_", d->indent, "", wtd->prefix);
      output_mangled_typename (d->of, f);
      oprintf (d->of, " (%s%s);\n", cast, d->val);
      if (d->reorder_fn && wtd->reorder_note_routine)
 oprintf (d->of, "%*s%s (%s%s, %s%s, %s);\n", d->indent, "",
   wtd->reorder_note_routine, cast, d->val, cast, d->val,
   d->reorder_fn);
      break;

    case TYPE_SCALAR:
      break;

    default:
      (fancy_abort ("../../gcc/gcc/gengtype.c", 1960, __FUNCTION__));
    }
}
# 1972 "../../gcc/gcc/gengtype.c"
static void
write_func_for_structure (type_p orig_s, type_p s, type_p *param,
     const struct write_types_data *wtd)
{
  const char *fn = s->u.s.line.file;
  int i;
  const char *chain_next = ((void *)0);
  const char *chain_prev = ((void *)0);
  options_p opt;
  struct walk_type_data d;


  for (i = 10 - 1; i >= 0; i--)
    if (param && param[i] && param[i]->kind == TYPE_POINTER
 && ((param[i]->u.p)->kind == TYPE_UNION || (param[i]->u.p)->kind == TYPE_STRUCT || (param[i]->u.p)->kind == TYPE_LANG_STRUCT))
      fn = param[i]->u.p->u.s.line.file;

  memset (&d, 0, sizeof (d));
  d.of = get_output_file_with_visibility (fn);

  for (opt = s->u.s.opt; opt; opt = opt->next)
    if (strcmp (opt->name, "chain_next") == 0)
      chain_next = opt->info;
    else if (strcmp (opt->name, "chain_prev") == 0)
      chain_prev = opt->info;

  if (chain_prev != ((void *)0) && chain_next == ((void *)0))
    error_at_line (&s->u.s.line, "chain_prev without chain_next");

  d.process_field = write_types_process_field;
  d.cookie = wtd;
  d.orig_s = orig_s;
  d.opt = s->u.s.opt;
  d.line = &s->u.s.line;
  d.bitmap = s->u.s.bitmap;
  d.param = param;
  d.prev_val[0] = "*x";
  d.prev_val[1] = "not valid postage";
  d.prev_val[3] = "x";
  d.val = "(*x)";

  oprintf (d.of, "\n");
  oprintf (d.of, "void\n");
  if (param == ((void *)0))
    oprintf (d.of, "gt_%sx_%s", wtd->prefix, orig_s->u.s.tag);
  else
    {
      oprintf (d.of, "gt_%s_", wtd->prefix);
      output_mangled_typename (d.of, orig_s);
    }
  oprintf (d.of, " (void *x_p)\n");
  oprintf (d.of, "{\n");
  oprintf (d.of, "  %s %s * %sx = (%s %s *)x_p;\n",
    s->kind == TYPE_UNION ? "union" : "struct", s->u.s.tag,
    chain_next == ((void *)0) ? "const " : "",
    s->kind == TYPE_UNION ? "union" : "struct", s->u.s.tag);
  if (chain_next != ((void *)0))
    oprintf (d.of, "  %s %s * xlimit = x;\n",
      s->kind == TYPE_UNION ? "union" : "struct", s->u.s.tag);
  if (chain_next == ((void *)0))
    {
      oprintf (d.of, "  if (%s (x", wtd->marker_routine);
      if (wtd->param_prefix)
 {
   oprintf (d.of, ", x, gt_%s_", wtd->param_prefix);
   output_mangled_typename (d.of, orig_s);
 }
      oprintf (d.of, "))\n");
    }
  else
    {
      oprintf (d.of, "  while (%s (xlimit", wtd->marker_routine);
      if (wtd->param_prefix)
 {
   oprintf (d.of, ", xlimit, gt_%s_", wtd->param_prefix);
   output_mangled_typename (d.of, orig_s);
 }
      oprintf (d.of, "))\n");
      oprintf (d.of, "   xlimit = (");
      d.prev_val[2] = "*xlimit";
      output_escaped_param (&d, chain_next, "chain_next");
      oprintf (d.of, ");\n");
      if (chain_prev != ((void *)0))
 {
   oprintf (d.of, "  if (x != xlimit)\n");
   oprintf (d.of, "    for (;;)\n");
   oprintf (d.of, "      {\n");
   oprintf (d.of, "        %s %s * const xprev = (",
     s->kind == TYPE_UNION ? "union" : "struct", s->u.s.tag);

   d.prev_val[2] = "*x";
   output_escaped_param (&d, chain_prev, "chain_prev");
   oprintf (d.of, ");\n");
   oprintf (d.of, "        if (xprev == NULL) break;\n");
   oprintf (d.of, "        x = xprev;\n");
   oprintf (d.of, "        (void) %s (xprev",
     wtd->marker_routine);
   if (wtd->param_prefix)
     {
       oprintf (d.of, ", xprev, gt_%s_", wtd->param_prefix);
       output_mangled_typename (d.of, orig_s);
     }
   oprintf (d.of, ");\n");
   oprintf (d.of, "      }\n");
 }
      oprintf (d.of, "  while (x != xlimit)\n");
    }
  oprintf (d.of, "    {\n");

  d.prev_val[2] = "*x";
  d.indent = 6;
  walk_type (s, &d);

  if (chain_next != ((void *)0))
    {
      oprintf (d.of, "      x = (");
      output_escaped_param (&d, chain_next, "chain_next");
      oprintf (d.of, ");\n");
    }

  oprintf (d.of, "    }\n");
  oprintf (d.of, "}\n");
}



static void
write_types (type_p structures, type_p param_structs,
      const struct write_types_data *wtd)
{
  type_p s;

  oprintf (header_file, "\n/* %s*/\n", wtd->comment);
  for (s = structures; s; s = s->next)
    if (s->gc_used == GC_POINTED_TO
 || s->gc_used == GC_MAYBE_POINTED_TO)
      {
 options_p opt;

 if (s->gc_used == GC_MAYBE_POINTED_TO
     && s->u.s.line.file == ((void *)0))
   continue;

 oprintf (header_file, "#define gt_%s_", wtd->prefix);
 output_mangled_typename (header_file, s);
 oprintf (header_file, "(X) do { \\\n");
 oprintf (header_file,
   "  if (X != NULL) gt_%sx_%s (X);\\\n", wtd->prefix,
   s->u.s.tag);
 oprintf (header_file,
   "  } while (0)\n");

 for (opt = s->u.s.opt; opt; opt = opt->next)
   if (strcmp (opt->name, "ptr_alias") == 0)
     {
       type_p t = (type_p) opt->info;
       if (t->kind == TYPE_STRUCT
    || t->kind == TYPE_UNION
    || t->kind == TYPE_LANG_STRUCT)
  oprintf (header_file,
    "#define gt_%sx_%s gt_%sx_%s\n",
    wtd->prefix, s->u.s.tag, wtd->prefix, t->u.s.tag);
       else
  error_at_line (&s->u.s.line,
          "structure alias is not a structure");
       break;
     }
 if (opt)
   continue;


 oprintf (header_file,
   "extern void gt_%sx_%s (void *);\n",
   wtd->prefix, s->u.s.tag);

 if (s->u.s.line.file == ((void *)0))
   {
     fprintf (stderr, "warning: structure `%s' used but not defined\n",
       s->u.s.tag);
     continue;
   }

 if (s->kind == TYPE_LANG_STRUCT)
   {
     type_p ss;
     for (ss = s->u.s.lang_struct; ss; ss = ss->next)
       write_func_for_structure (s, ss, ((void *)0), wtd);
   }
 else
   write_func_for_structure (s, s, ((void *)0), wtd);
      }

  for (s = param_structs; s; s = s->next)
    if (s->gc_used == GC_POINTED_TO)
      {
 type_p * param = s->u.param_struct.param;
 type_p stru = s->u.param_struct.stru;


 oprintf (header_file, "extern void gt_%s_", wtd->prefix);
 output_mangled_typename (header_file, s);
 oprintf (header_file, " (void *);\n");

 if (stru->u.s.line.file == ((void *)0))
   {
     fprintf (stderr, "warning: structure `%s' used but not defined\n",
       s->u.s.tag);
     continue;
   }

 if (stru->kind == TYPE_LANG_STRUCT)
   {
     type_p ss;
     for (ss = stru->u.s.lang_struct; ss; ss = ss->next)
       write_func_for_structure (s, ss, param, wtd);
   }
 else
   write_func_for_structure (s, stru, param, wtd);
      }
}

static const struct write_types_data ggc_wtd =
{
  "ggc_m", ((void *)0), "ggc_mark", "ggc_test_and_set_mark", ((void *)0),
  "GC marker procedures.  "
};

static const struct write_types_data pch_wtd =
{
  "pch_n", "pch_p", "gt_pch_note_object", "gt_pch_note_object",
  "gt_pch_note_reorder",
  "PCH type-walking procedures.  "
};





static void
write_types_local_process_field (type_p f, const struct walk_type_data *d)
{
  switch (f->kind)
    {
    case TYPE_POINTER:
    case TYPE_STRUCT:
    case TYPE_UNION:
    case TYPE_LANG_STRUCT:
    case TYPE_PARAM_STRUCT:
    case TYPE_STRING:
      oprintf (d->of, "%*sif ((void *)(%s) == this_obj)\n", d->indent, "",
        d->prev_val[3]);
      oprintf (d->of, "%*s  op (&(%s), cookie);\n", d->indent, "", d->val);
      break;

    case TYPE_SCALAR:
      break;

    default:
      (fancy_abort ("../../gcc/gcc/gengtype.c", 2230, __FUNCTION__));
    }
}







static void
write_local_func_for_structure (type_p orig_s, type_p s, type_p *param)
{
  const char *fn = s->u.s.line.file;
  int i;
  struct walk_type_data d;


  for (i = 10 - 1; i >= 0; i--)
    if (param && param[i] && param[i]->kind == TYPE_POINTER
 && ((param[i]->u.p)->kind == TYPE_UNION || (param[i]->u.p)->kind == TYPE_STRUCT || (param[i]->u.p)->kind == TYPE_LANG_STRUCT))
      fn = param[i]->u.p->u.s.line.file;

  memset (&d, 0, sizeof (d));
  d.of = get_output_file_with_visibility (fn);

  d.process_field = write_types_local_process_field;
  d.opt = s->u.s.opt;
  d.line = &s->u.s.line;
  d.bitmap = s->u.s.bitmap;
  d.param = param;
  d.prev_val[0] = d.prev_val[2] = "*x";
  d.prev_val[1] = "not valid postage";
  d.prev_val[3] = "x";
  d.val = "(*x)";
  d.fn_wants_lvalue = 1;

  oprintf (d.of, "\n");
  oprintf (d.of, "void\n");
  oprintf (d.of, "gt_pch_p_");
  output_mangled_typename (d.of, orig_s);
  oprintf (d.of, " (ATTRIBUTE_UNUSED void *this_obj,\n"
    "\tvoid *x_p,\n"
    "\tATTRIBUTE_UNUSED gt_pointer_operator op,\n"
    "\tATTRIBUTE_UNUSED void *cookie)\n");
  oprintf (d.of, "{\n");
  oprintf (d.of, "  %s %s * const x ATTRIBUTE_UNUSED = (%s %s *)x_p;\n",
    s->kind == TYPE_UNION ? "union" : "struct", s->u.s.tag,
    s->kind == TYPE_UNION ? "union" : "struct", s->u.s.tag);
  d.indent = 2;
  walk_type (s, &d);
  oprintf (d.of, "}\n");
}



static void
write_local (type_p structures, type_p param_structs)
{
  type_p s;

  oprintf (header_file, "\n/* Local pointer-walking routines.  */\n");
  for (s = structures; s; s = s->next)
    if (s->gc_used == GC_POINTED_TO
 || s->gc_used == GC_MAYBE_POINTED_TO)
      {
 options_p opt;

 if (s->u.s.line.file == ((void *)0))
   continue;

 for (opt = s->u.s.opt; opt; opt = opt->next)
   if (strcmp (opt->name, "ptr_alias") == 0)
     {
       type_p t = (type_p) opt->info;
       if (t->kind == TYPE_STRUCT
    || t->kind == TYPE_UNION
    || t->kind == TYPE_LANG_STRUCT)
  {
    oprintf (header_file, "#define gt_pch_p_");
    output_mangled_typename (header_file, s);
    oprintf (header_file, " gt_pch_p_");
    output_mangled_typename (header_file, t);
    oprintf (header_file, "\n");
  }
       else
  error_at_line (&s->u.s.line,
          "structure alias is not a structure");
       break;
     }
 if (opt)
   continue;


 oprintf (header_file, "extern void gt_pch_p_");
 output_mangled_typename (header_file, s);
 oprintf (header_file,
  "\n    (void *, void *, gt_pointer_operator, void *);\n");

 if (s->kind == TYPE_LANG_STRUCT)
   {
     type_p ss;
     for (ss = s->u.s.lang_struct; ss; ss = ss->next)
       write_local_func_for_structure (s, ss, ((void *)0));
   }
 else
   write_local_func_for_structure (s, s, ((void *)0));
      }

  for (s = param_structs; s; s = s->next)
    if (s->gc_used == GC_POINTED_TO)
      {
 type_p * param = s->u.param_struct.param;
 type_p stru = s->u.param_struct.stru;


 oprintf (header_file, "extern void gt_pch_p_");
 output_mangled_typename (header_file, s);
 oprintf (header_file,
  "\n    (void *, void *, gt_pointer_operator, void *);\n");

 if (stru->u.s.line.file == ((void *)0))
   {
     fprintf (stderr, "warning: structure `%s' used but not defined\n",
       s->u.s.tag);
     continue;
   }

 if (stru->kind == TYPE_LANG_STRUCT)
   {
     type_p ss;
     for (ss = stru->u.s.lang_struct; ss; ss = ss->next)
       write_local_func_for_structure (s, ss, param);
   }
 else
   write_local_func_for_structure (s, stru, param);
      }
}



static void
write_enum_defn (type_p structures, type_p param_structs)
{
  type_p s;

  oprintf (header_file, "\n/* Enumeration of types known.  */\n");
  oprintf (header_file, "enum gt_types_enum {\n");
  for (s = structures; s; s = s->next)
    if (s->gc_used == GC_POINTED_TO
 || s->gc_used == GC_MAYBE_POINTED_TO)
      {
 if (s->gc_used == GC_MAYBE_POINTED_TO
     && s->u.s.line.file == ((void *)0))
   continue;

 oprintf (header_file, " gt_ggc_e_");
 output_mangled_typename (header_file, s);
 oprintf (header_file, ", \n");
      }
  for (s = param_structs; s; s = s->next)
    if (s->gc_used == GC_POINTED_TO)
      {
 oprintf (header_file, " gt_e_");
 output_mangled_typename (header_file, s);
 oprintf (header_file, ", \n");
      }
  oprintf (header_file, " gt_types_enum_last\n");
  oprintf (header_file, "};\n");
}



static int
contains_scalar_p (type_p t)
{
  switch (t->kind)
    {
    case TYPE_STRING:
    case TYPE_POINTER:
      return 0;
    case TYPE_ARRAY:
      return contains_scalar_p (t->u.a.p);
    default:


      return 1;
    }
}



static void
put_mangled_filename (outf_p f, const char *fn)
{
  const char *name = get_output_file_name (fn);
  for (; *name != 0; name++)
    if ((_sch_istable[(*name) & 0xff] & (unsigned short)(_sch_isalnum)))
      oprintf (f, "%c", *name);
    else
      oprintf (f, "%c", '_');
}





static void
finish_root_table (struct flist *flp, const char *pfx, const char *lastname,
     const char *tname, const char *name)
{
  struct flist *fli2;

  for (fli2 = flp; fli2; fli2 = fli2->next)
    if (fli2->started_p)
      {
 oprintf (fli2->f, "  %s\n", lastname);
 oprintf (fli2->f, "};\n\n");
      }

  for (fli2 = flp; fli2; fli2 = fli2->next)
    if (fli2->started_p)
      {
 lang_bitmap bitmap = get_base_file_bitmap (fli2->name);
 int fnum;

 for (fnum = 0; bitmap != 0; fnum++, bitmap >>= 1)
   if (bitmap & 1)
     {
       oprintf (base_files[fnum],
         "extern const struct %s gt_%s_",
         tname, pfx);
       put_mangled_filename (base_files[fnum], fli2->name);
       oprintf (base_files[fnum], "[];\n");
     }
      }

  {
    size_t fnum;
    for (fnum = 0; fnum < ((sizeof (lang_dir_names) / sizeof ((lang_dir_names)[0])) - 1); fnum++)
      oprintf (base_files [fnum],
        "const struct %s * const %s[] = {\n",
        tname, name);
  }


  for (fli2 = flp; fli2; fli2 = fli2->next)
    if (fli2->started_p)
      {
 lang_bitmap bitmap = get_base_file_bitmap (fli2->name);
 int fnum;

 fli2->started_p = 0;

 for (fnum = 0; bitmap != 0; fnum++, bitmap >>= 1)
   if (bitmap & 1)
     {
       oprintf (base_files[fnum], "  gt_%s_", pfx);
       put_mangled_filename (base_files[fnum], fli2->name);
       oprintf (base_files[fnum], ",\n");
     }
      }

  {
    size_t fnum;
    for (fnum = 0; fnum < ((sizeof (lang_dir_names) / sizeof ((lang_dir_names)[0])) - 1); fnum++)
      {
 oprintf (base_files[fnum], "  NULL\n");
 oprintf (base_files[fnum], "};\n");
      }
  }
}






static void
write_root (outf_p f, pair_p v, type_p type, const char *name, int has_length,
     struct fileloc *line, const char *if_marked)
{
  switch (type->kind)
    {
    case TYPE_STRUCT:
      {
 pair_p fld;
 for (fld = type->u.s.fields; fld; fld = fld->next)
   {
     int skip_p = 0;
     const char *desc = ((void *)0);
     options_p o;

     for (o = fld->opt; o; o = o->next)
       if (strcmp (o->name, "skip") == 0)
  skip_p = 1;
       else if (strcmp (o->name, "desc") == 0)
  desc = o->info;
       else
  error_at_line (line,
         "field `%s' of global `%s' has unknown option `%s'",
          fld->name, name, o->name);

     if (skip_p)
       continue;
     else if (desc && fld->type->kind == TYPE_UNION)
       {
  pair_p validf = ((void *)0);
  pair_p ufld;

  for (ufld = fld->type->u.s.fields; ufld; ufld = ufld->next)
    {
      const char *tag = ((void *)0);
      options_p oo;

      for (oo = ufld->opt; oo; oo = oo->next)
        if (strcmp (oo->name, "tag") == 0)
   tag = oo->info;
      if (tag == ((void *)0) || strcmp (tag, desc) != 0)
        continue;
      if (validf != ((void *)0))
        error_at_line (line,
      "both `%s.%s.%s' and `%s.%s.%s' have tag `%s'",
         name, fld->name, validf->name,
         name, fld->name, ufld->name,
         tag);
      validf = ufld;
    }
  if (validf != ((void *)0))
    {
      char *newname;
      newname = xasprintf ("%s.%s.%s",
      name, fld->name, validf->name);
      write_root (f, v, validf->type, newname, 0, line,
    if_marked);
      free (newname);
    }
       }
     else if (desc)
       error_at_line (line,
       "global `%s.%s' has `desc' option but is not union",
        name, fld->name);
     else
       {
  char *newname;
  newname = xasprintf ("%s.%s", name, fld->name);
  write_root (f, v, fld->type, newname, 0, line, if_marked);
  free (newname);
       }
   }
      }
      break;

    case TYPE_ARRAY:
      {
 char *newname;
 newname = xasprintf ("%s[0]", name);
 write_root (f, v, type->u.a.p, newname, has_length, line, if_marked);
 free (newname);
      }
      break;

    case TYPE_POINTER:
      {
 type_p ap, tp;

 oprintf (f, "  {\n");
 oprintf (f, "    &%s,\n", name);
 oprintf (f, "    1");

 for (ap = v->type; ap->kind == TYPE_ARRAY; ap = ap->u.a.p)
   if (ap->u.a.len[0])
     oprintf (f, " * (%s)", ap->u.a.len);
   else if (ap == v->type)
     oprintf (f, " * ARRAY_SIZE (%s)", v->name);
 oprintf (f, ",\n");
 oprintf (f, "    sizeof (%s", v->name);
 for (ap = v->type; ap->kind == TYPE_ARRAY; ap = ap->u.a.p)
   oprintf (f, "[0]");
 oprintf (f, "),\n");

 tp = type->u.p;

 if (! has_length && ((tp)->kind == TYPE_UNION || (tp)->kind == TYPE_STRUCT || (tp)->kind == TYPE_LANG_STRUCT))
   {
     oprintf (f, "    &gt_ggc_mx_%s,\n", tp->u.s.tag);
     oprintf (f, "    &gt_pch_nx_%s", tp->u.s.tag);
   }
 else if (! has_length && tp->kind == TYPE_PARAM_STRUCT)
   {
     oprintf (f, "    &gt_ggc_m_");
     output_mangled_typename (f, tp);
     oprintf (f, ",\n    &gt_pch_n_");
     output_mangled_typename (f, tp);
   }
 else if (has_length
   && (tp->kind == TYPE_POINTER || ((tp)->kind == TYPE_UNION || (tp)->kind == TYPE_STRUCT || (tp)->kind == TYPE_LANG_STRUCT)))
   {
     oprintf (f, "    &gt_ggc_ma_%s,\n", name);
     oprintf (f, "    &gt_pch_na_%s", name);
   }
 else
   {
     error_at_line (line,
      "global `%s' is pointer to unimplemented type",
      name);
   }
 if (if_marked)
   oprintf (f, ",\n    &%s", if_marked);
 oprintf (f, "\n  },\n");
      }
      break;

    case TYPE_STRING:
      {
 oprintf (f, "  {\n");
 oprintf (f, "    &%s,\n", name);
 oprintf (f, "    1, \n");
 oprintf (f, "    sizeof (%s),\n", v->name);
 oprintf (f, "    &gt_ggc_m_S,\n");
 oprintf (f, "    (gt_pointer_walker) &gt_pch_n_S\n");
 oprintf (f, "  },\n");
      }
      break;

    case TYPE_SCALAR:
      break;

    default:
      error_at_line (line,
       "global `%s' is unimplemented type",
       name);
    }
}



static void
write_array (outf_p f, pair_p v, const struct write_types_data *wtd)
{
  struct walk_type_data d;
  char *prevval3;

  memset (&d, 0, sizeof (d));
  d.of = f;
  d.cookie = wtd;
  d.indent = 2;
  d.line = &v->line;
  d.opt = v->opt;
  d.bitmap = get_base_file_bitmap (v->line.file);
  d.param = ((void *)0);

  d.prev_val[3] = prevval3 = xasprintf ("&%s", v->name);

  if (wtd->param_prefix)
    {
      oprintf (f, "static void gt_%sa_%s\n", wtd->param_prefix, v->name);
      oprintf (f,
       "    (void *, void *, gt_pointer_operator, void *);\n");
      oprintf (f, "static void gt_%sa_%s (ATTRIBUTE_UNUSED void *this_obj,\n",
        wtd->param_prefix, v->name);
      oprintf (d.of,
        "      ATTRIBUTE_UNUSED void *x_p,\n"
        "      ATTRIBUTE_UNUSED gt_pointer_operator op,\n"
        "      ATTRIBUTE_UNUSED void * cookie)\n");
      oprintf (d.of, "{\n");
      d.prev_val[0] = d.prev_val[1] = d.prev_val[2] = d.val = v->name;
      d.process_field = write_types_local_process_field;
      walk_type (v->type, &d);
      oprintf (f, "}\n\n");
    }

  d.opt = v->opt;
  oprintf (f, "static void gt_%sa_%s (void *);\n",
    wtd->prefix, v->name);
  oprintf (f, "static void\ngt_%sa_%s (ATTRIBUTE_UNUSED void *x_p)\n",
    wtd->prefix, v->name);
  oprintf (f, "{\n");
  d.prev_val[0] = d.prev_val[1] = d.prev_val[2] = d.val = v->name;
  d.process_field = write_types_process_field;
  walk_type (v->type, &d);
  free (prevval3);
  oprintf (f, "}\n\n");
}



static void
write_roots (pair_p variables)
{
  pair_p v;
  struct flist *flp = ((void *)0);

  for (v = variables; v; v = v->next)
    {
      outf_p f = get_output_file_with_visibility (v->line.file);
      struct flist *fli;
      const char *length = ((void *)0);
      int deletable_p = 0;
      options_p o;

      for (o = v->opt; o; o = o->next)
 if (strcmp (o->name, "length") == 0)
   length = o->info;
 else if (strcmp (o->name, "deletable") == 0)
   deletable_p = 1;
 else if (strcmp (o->name, "param_is") == 0)
   ;
 else if (strncmp (o->name, "param", 5) == 0
   && (_sch_istable[(o->name[5]) & 0xff] & (unsigned short)(_sch_isdigit))
   && strcmp (o->name + 6, "_is") == 0)
   ;
 else if (strcmp (o->name, "if_marked") == 0)
   ;
 else
   error_at_line (&v->line,
    "global `%s' has unknown option `%s'",
    v->name, o->name);

      for (fli = flp; fli; fli = fli->next)
 if (fli->f == f)
   break;
      if (fli == ((void *)0))
 {
   fli = ((struct flist *) xmalloc (sizeof (struct flist)));
   fli->f = f;
   fli->next = flp;
   fli->started_p = 0;
   fli->name = v->line.file;
   flp = fli;

   oprintf (f, "\n/* GC roots.  */\n\n");
 }

      if (! deletable_p
   && length
   && v->type->kind == TYPE_POINTER
   && (v->type->u.p->kind == TYPE_POINTER
       || v->type->u.p->kind == TYPE_STRUCT))
 {
   write_array (f, v, &ggc_wtd);
   write_array (f, v, &pch_wtd);
 }
    }

  for (v = variables; v; v = v->next)
    {
      outf_p f = get_output_file_with_visibility (v->line.file);
      struct flist *fli;
      int skip_p = 0;
      int length_p = 0;
      options_p o;

      for (o = v->opt; o; o = o->next)
 if (strcmp (o->name, "length") == 0)
   length_p = 1;
 else if (strcmp (o->name, "deletable") == 0
   || strcmp (o->name, "if_marked") == 0)
   skip_p = 1;

      if (skip_p)
 continue;

      for (fli = flp; fli; fli = fli->next)
 if (fli->f == f)
   break;
      if (! fli->started_p)
 {
   fli->started_p = 1;

   oprintf (f, "const struct ggc_root_tab gt_ggc_r_");
   put_mangled_filename (f, v->line.file);
   oprintf (f, "[] = {\n");
 }

      write_root (f, v, v->type, v->name, length_p, &v->line, ((void *)0));
    }

  finish_root_table (flp, "ggc_r", "LAST_GGC_ROOT_TAB", "ggc_root_tab",
       "gt_ggc_rtab");

  for (v = variables; v; v = v->next)
    {
      outf_p f = get_output_file_with_visibility (v->line.file);
      struct flist *fli;
      int skip_p = 1;
      options_p o;

      for (o = v->opt; o; o = o->next)
 if (strcmp (o->name, "deletable") == 0)
   skip_p = 0;
 else if (strcmp (o->name, "if_marked") == 0)
   skip_p = 1;

      if (skip_p)
 continue;

      for (fli = flp; fli; fli = fli->next)
 if (fli->f == f)
   break;
      if (! fli->started_p)
 {
   fli->started_p = 1;

   oprintf (f, "const struct ggc_root_tab gt_ggc_rd_");
   put_mangled_filename (f, v->line.file);
   oprintf (f, "[] = {\n");
 }

      oprintf (f, "  { &%s, 1, sizeof (%s), NULL, NULL },\n",
        v->name, v->name);
    }

  finish_root_table (flp, "ggc_rd", "LAST_GGC_ROOT_TAB", "ggc_root_tab",
       "gt_ggc_deletable_rtab");

  for (v = variables; v; v = v->next)
    {
      outf_p f = get_output_file_with_visibility (v->line.file);
      struct flist *fli;
      const char *if_marked = ((void *)0);
      int length_p = 0;
      options_p o;

      for (o = v->opt; o; o = o->next)
 if (strcmp (o->name, "length") == 0)
   length_p = 1;
 else if (strcmp (o->name, "if_marked") == 0)
   if_marked = o->info;

      if (if_marked == ((void *)0))
 continue;

      if (v->type->kind != TYPE_POINTER
   || v->type->u.p->kind != TYPE_PARAM_STRUCT
   || v->type->u.p->u.param_struct.stru != find_structure ("htab", 0))
 {
   error_at_line (&v->line, "if_marked option used but not hash table");
   continue;
 }

      for (fli = flp; fli; fli = fli->next)
 if (fli->f == f)
   break;
      if (! fli->started_p)
 {
   fli->started_p = 1;

   oprintf (f, "const struct ggc_cache_tab gt_ggc_rc_");
   put_mangled_filename (f, v->line.file);
   oprintf (f, "[] = {\n");
 }

      write_root (f, v, v->type->u.p->u.param_struct.param[0],
       v->name, length_p, &v->line, if_marked);
    }

  finish_root_table (flp, "ggc_rc", "LAST_GGC_CACHE_TAB", "ggc_cache_tab",
       "gt_ggc_cache_rtab");

  for (v = variables; v; v = v->next)
    {
      outf_p f = get_output_file_with_visibility (v->line.file);
      struct flist *fli;
      int length_p = 0;
      int if_marked_p = 0;
      options_p o;

      for (o = v->opt; o; o = o->next)
 if (strcmp (o->name, "length") == 0)
   length_p = 1;
 else if (strcmp (o->name, "if_marked") == 0)
   if_marked_p = 1;

      if (! if_marked_p)
 continue;

      for (fli = flp; fli; fli = fli->next)
 if (fli->f == f)
   break;
      if (! fli->started_p)
 {
   fli->started_p = 1;

   oprintf (f, "const struct ggc_root_tab gt_pch_rc_");
   put_mangled_filename (f, v->line.file);
   oprintf (f, "[] = {\n");
 }

      write_root (f, v, v->type, v->name, length_p, &v->line, ((void *)0));
    }

  finish_root_table (flp, "pch_rc", "LAST_GGC_ROOT_TAB", "ggc_root_tab",
       "gt_pch_cache_rtab");

  for (v = variables; v; v = v->next)
    {
      outf_p f = get_output_file_with_visibility (v->line.file);
      struct flist *fli;
      int skip_p = 0;
      options_p o;

      for (o = v->opt; o; o = o->next)
 if (strcmp (o->name, "deletable") == 0
     || strcmp (o->name, "if_marked") == 0)
   skip_p = 1;

      if (skip_p)
 continue;

      if (! contains_scalar_p (v->type))
 continue;

      for (fli = flp; fli; fli = fli->next)
 if (fli->f == f)
   break;
      if (! fli->started_p)
 {
   fli->started_p = 1;

   oprintf (f, "const struct ggc_root_tab gt_pch_rs_");
   put_mangled_filename (f, v->line.file);
   oprintf (f, "[] = {\n");
 }

      oprintf (f, "  { &%s, 1, sizeof (%s), NULL, NULL },\n",
        v->name, v->name);
    }

  finish_root_table (flp, "pch_rs", "LAST_GGC_ROOT_TAB", "ggc_root_tab",
       "gt_pch_scalar_rtab");
}


extern int main (int argc, char **argv);
int
main(int argc __attribute__ ((__unused__)), char ** argv __attribute__ ((__unused__)))
{
  unsigned i;
  static struct fileloc pos = { "../../gcc/gcc/gengtype.c", 2969 };
  unsigned j;

  gen_rtx_next ();

  srcdir_len = strlen (srcdir);

  do_scalar_typedef ("CUMULATIVE_ARGS", &pos);
  do_scalar_typedef ("REAL_VALUE_TYPE", &pos);
  do_scalar_typedef ("uint8", &pos);
  do_scalar_typedef ("jword", &pos);
  do_scalar_typedef ("JCF_u2", &pos);




  do_scalar_typedef ("void", &pos);

  do_typedef ("PTR", create_pointer (resolve_typedef ("void", &pos)), &pos);

  do_typedef ("HARD_REG_SET", create_array (
       create_scalar_type ("unsigned long", strlen ("unsigned long")),
       "2"), &pos);

  for (i = 0; i < ((sizeof (all_files) / sizeof ((all_files)[0])) - 1); i++)
    {
      int dupflag = 0;

      for (j = 0; j < i; j++)
        {
          if (!strcmp (all_files[i], all_files[j]))
            {
              dupflag = 1;
              break;
            }
        }
      if (!dupflag)
        parse_file (all_files[i]);



      if (i == 0)
 do_typedef ("source_locus", create_pointer (resolve_typedef ("location_t", &pos)), &pos);

    }

  if (hit_error != 0)
    exit (1);

  set_gc_used (variables);

  open_base_files ();
  write_enum_defn (structures, param_structs);
  write_types (structures, param_structs, &ggc_wtd);
  write_types (structures, param_structs, &pch_wtd);
  write_local (structures, param_structs);
  write_roots (variables);
  write_rtx_next ();
  close_output_files ();

  return (hit_error != 0);
}

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