public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Bug?
@ 2004-12-12  0:58 Sam Lauber
  2004-12-12  1:49 ` Bug? Giovanni Bajo
  2004-12-12  3:24 ` Bug? Aaron W. LaFramboise
  0 siblings, 2 replies; 10+ messages in thread
From: Sam Lauber @ 2004-12-12  0:58 UTC (permalink / raw)
  To: gcc

[-- Attachment #1: Type: text/plain, Size: 989 bytes --]

I was compiling gnulib2 (which was part of gcc 1.42) with GCC 3.4.3. The CFLAGS were -g. There was nothing wrong with the code. However,

+ gcc -g -O3 tree.c -c
- tree.c: In function `array_type_nelts':
- tree.c:1015: internal compiler error: in 
- add_abstract_origin_attribute, at dwarf2out.c:10112
- Please submit a full bug report,
- with preprocessed source if appropriate.
- See <URL:http://gcc.gnu.org/bugs.html> for instructions.

However, when changing -g to -gstabs+, it worked perfectly fine. Does this warrant a bug? The preprocessed source is attached. I compiled with my hand-built GCC 3.4.3 (compiled with make profiledbootstrap). The code in dwarf2out.c:10112 was

abort ();

Strangely, the diffs indicated no diffrence at that line!

Samuel Lauber
-- 
_____________________________________________________________
Web-based SMS services available at http://www.operamail.com.
From your mailbox to local or overseas cell phones.

Powered by Outblaze

[-- Attachment #2: tree.i --]
[-- Type: application/octet-stream, Size: 79259 bytes --]

# 1 "tree.c"
# 1 "/home/sam-back/gcc-1.42//"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "tree.c"
# 35 "tree.c"
# 1 "config.h" 1
# 39 "config.h"
# 1 "tm.h" 1
# 21 "tm.h"
# 1 "./config/tm-i386.h" 1
# 33 "./config/tm-i386.h"
extern int target_flags;
# 247 "./config/tm-i386.h"
enum reg_class {
  NO_REGS, AREG, DREG, ADREG, CREG, BREG, Q_REGS, SIREG, DIREG,
  INDEX_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS, LIM_REG_CLASSES };
# 22 "tm.h" 2
# 35 "tm.h"
# 1 "./config/tm-bsd386.h" 1
# 36 "tm.h" 2
# 40 "config.h" 2
# 36 "tree.c" 2
# 1 "/usr/include/stdio.h" 1 3 4
# 28 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 295 "/usr/include/features.h" 3 4
# 1 "/usr/include/sys/cdefs.h" 1 3 4
# 296 "/usr/include/features.h" 2 3 4
# 318 "/usr/include/features.h" 3 4
# 1 "/usr/include/gnu/stubs.h" 1 3 4
# 319 "/usr/include/features.h" 2 3 4
# 29 "/usr/include/stdio.h" 2 3 4





# 1 "./stddef.h" 1 3 4
# 20 "./stddef.h" 3 4
typedef long ptrdiff_t;
# 39 "./stddef.h" 3 4
typedef unsigned long size_t;
# 52 "./stddef.h" 3 4
typedef int wchar_t;
# 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





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;
# 129 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/typesizes.h" 1 3 4
# 130 "/usr/include/bits/types.h" 2 3 4






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

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


__extension__ typedef int __clockid_t;


__extension__ typedef int __timer_t;


__extension__ typedef long int __blksize_t;




__extension__ typedef long int __blkcnt_t;
__extension__ typedef long long int __blkcnt64_t;


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


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

__extension__ typedef int __ssize_t;



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


__extension__ typedef int __intptr_t;


__extension__ 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
# 21 "/usr/include/_G_config.h" 3 4
typedef unsigned int wint_t;


# 1 "/usr/include/wchar.h" 1 3 4
# 50 "/usr/include/wchar.h" 3 4
# 1 "/usr/include/bits/wchar.h" 1 3 4
# 51 "/usr/include/wchar.h" 2 3 4
# 76 "/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
# 29 "/usr/include/gconv.h" 2 3 4
# 37 "/usr/include/gconv.h" 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
# 53 "/usr/include/libio.h" 3 4
# 1 "/usr/local/lib/gcc/i686-pc-linux-gnu/3.4.3/include/stdarg.h" 1 3 4
# 43 "/usr/local/lib/gcc/i686-pc-linux-gnu/3.4.3/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 54 "/usr/include/libio.h" 2 3 4
# 163 "/usr/include/libio.h" 3 4
struct _IO_jump_t; struct _IO_FILE;
# 173 "/usr/include/libio.h" 3 4
typedef void _IO_lock_t;





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



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


enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};
# 264 "/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;
# 312 "/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_;
# 351 "/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);
# 403 "/usr/include/libio.h" 3 4
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) ;
# 441 "/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 *) ;
# 477 "/usr/include/libio.h" 3 4
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;




# 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);
# 180 "/usr/include/stdio.h" 3 4
extern char *tmpnam (char *__s) ;





extern char *tmpnam_r (char *__s) ;
# 198 "/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);

# 223 "/usr/include/stdio.h" 3 4
extern int fflush_unlocked (FILE *__stream);
# 237 "/usr/include/stdio.h" 3 4






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

# 275 "/usr/include/stdio.h" 3 4
extern FILE *fdopen (int __fd, __const char *__modes) ;
# 296 "/usr/include/stdio.h" 3 4



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, ...) ;
# 350 "/usr/include/stdio.h" 3 4





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







# 394 "/usr/include/stdio.h" 3 4





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

# 436 "/usr/include/stdio.h" 3 4





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





extern int getchar (void);

# 460 "/usr/include/stdio.h" 3 4
extern int getc_unlocked (FILE *__stream);
extern int getchar_unlocked (void);
# 471 "/usr/include/stdio.h" 3 4
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);

# 504 "/usr/include/stdio.h" 3 4
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);

# 584 "/usr/include/stdio.h" 3 4





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

# 637 "/usr/include/stdio.h" 3 4
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);

# 692 "/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);
# 715 "/usr/include/stdio.h" 3 4

# 724 "/usr/include/stdio.h" 3 4


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[];
# 754 "/usr/include/stdio.h" 2 3 4




extern int fileno (FILE *__stream) ;




extern int fileno_unlocked (FILE *__stream) ;
# 773 "/usr/include/stdio.h" 3 4
extern FILE *popen (__const char *__command, __const char *__modes);





extern int pclose (FILE *__stream);





extern char *ctermid (char *__s) ;
# 813 "/usr/include/stdio.h" 3 4
extern void flockfile (FILE *__stream) ;



extern int ftrylockfile (FILE *__stream) ;


extern void funlockfile (FILE *__stream) ;
# 834 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/bits/stdio.h" 1 3 4
# 68 "/usr/include/bits/stdio.h" 3 4
extern __inline int
getchar_unlocked (void)
{
  return (__builtin_expect ((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end, 0) ? __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 (__builtin_expect ((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end, 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}





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


extern __inline int
putchar_unlocked (int __c)
{
  return (__builtin_expect ((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end, 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
}
# 123 "/usr/include/bits/stdio.h" 3 4
extern __inline int
feof_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x10) != 0);
}


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



# 37 "tree.c" 2
# 1 "tree.h" 1
# 25 "tree.h"
enum tree_code {
# 1 "tree.def" 1
# 41 "tree.def"
ERROR_MARK,





IDENTIFIER_NODE,




OP_IDENTIFIER,






TREE_LIST,
# 87 "tree.def"
VOID_TYPE,







INTEGER_TYPE,



REAL_TYPE,



COMPLEX_TYPE,
# 115 "tree.def"
ENUMERAL_TYPE,



BOOLEAN_TYPE,



CHAR_TYPE,



POINTER_TYPE,





OFFSET_TYPE,



REFERENCE_TYPE,






METHOD_TYPE,


FILE_TYPE,
# 158 "tree.def"
ARRAY_TYPE,



SET_TYPE,



STRING_TYPE,







RECORD_TYPE,





UNION_TYPE,







FUNCTION_TYPE,





LANG_TYPE,







LABEL_STMT,


GOTO_STMT,






RETURN_STMT,


EXPR_STMT,





WITH_STMT,
# 239 "tree.def"
LET_STMT,





IF_STMT,




EXIT_STMT,
# 261 "tree.def"
CASE_STMT,


LOOP_STMT,


COMPOUND_STMT,


ASM_STMT,
# 281 "tree.def"
INTEGER_CST,


REAL_CST,




COMPLEX_CST,



STRING_CST,
# 345 "tree.def"
FUNCTION_DECL,
LABEL_DECL,
CONST_DECL,
TYPE_DECL,
VAR_DECL,
PARM_DECL,
RESULT_DECL,
FIELD_DECL,






COMPONENT_REF,


INDIRECT_REF,





OFFSET_REF,


BUFFER_REF,




ARRAY_REF,







CONSTRUCTOR,
# 393 "tree.def"
COMPOUND_EXPR,


MODIFY_EXPR,



INIT_EXPR,



NEW_EXPR,
DELETE_EXPR,




PUSH_EXPR,
POP_EXPR,





COND_EXPR,






CALL_EXPR,




METHOD_CALL_EXPR,
# 439 "tree.def"
WITH_CLEANUP_EXPR,



PLUS_EXPR,
MINUS_EXPR,
MULT_EXPR,






TRUNC_DIV_EXPR,


CEIL_DIV_EXPR,


FLOOR_DIV_EXPR,


ROUND_DIV_EXPR,


TRUNC_MOD_EXPR,
CEIL_MOD_EXPR,
FLOOR_MOD_EXPR,
ROUND_MOD_EXPR,





RDIV_EXPR,



EXACT_DIV_EXPR,






FIX_TRUNC_EXPR,
FIX_CEIL_EXPR,
FIX_FLOOR_EXPR,
FIX_ROUND_EXPR,


FLOAT_EXPR,



EXPON_EXPR,


NEGATE_EXPR,

MIN_EXPR,
MAX_EXPR,
ABS_EXPR,
FFS_EXPR,







LSHIFT_EXPR,
RSHIFT_EXPR,
LROTATE_EXPR,
RROTATE_EXPR,


BIT_IOR_EXPR,
BIT_XOR_EXPR,
BIT_AND_EXPR,
BIT_ANDTC_EXPR,
BIT_NOT_EXPR,






TRUTH_ANDIF_EXPR,
TRUTH_ORIF_EXPR,
TRUTH_AND_EXPR,
TRUTH_OR_EXPR,
TRUTH_NOT_EXPR,







LT_EXPR,
LE_EXPR,
GT_EXPR,
GE_EXPR,
EQ_EXPR,
NE_EXPR,


IN_EXPR,
SET_LE_EXPR,
CARD_EXPR,
RANGE_EXPR,




CONVERT_EXPR,


NOP_EXPR,






SAVE_EXPR,





RTL_EXPR,



ADDR_EXPR,




REFERENCE_EXPR,





WRAPPER_EXPR,
ANTI_WRAPPER_EXPR,



ENTRY_VALUE_EXPR,



COMPLEX_EXPR,



CONJ_EXPR,



REALPART_EXPR,
IMAGPART_EXPR,




PREDECREMENT_EXPR,
PREINCREMENT_EXPR,
POSTDECREMENT_EXPR,
POSTINCREMENT_EXPR,
# 27 "tree.h" 2

  LAST_AND_UNUSED_TREE_CODE

};
# 42 "tree.h"
extern char *tree_code_type[];



extern int tree_code_length[];






enum machine_mode {
# 1 "machmode.def" 1
# 71 "machmode.def"
VOIDmode,

QImode,
HImode,



PSImode,
SImode,
PDImode,
DImode,
TImode,
QFmode,
HFmode,
SFmode,
DFmode,
XFmode,
TFmode,
CQImode,
CHImode,
CSImode,
CDImode,
CTImode,
CQFmode,
CHFmode,
CSFmode,
CDFmode,
CXFmode,
CTFmode,



BImode,



BLKmode,


EPmode,
# 55 "tree.h" 2
MAX_MACHINE_MODE };
# 70 "tree.h"
enum built_in_function
{
  NOT_BUILT_IN,
  BUILT_IN_ALLOCA,
  BUILT_IN_ABS,
  BUILT_IN_FABS,
  BUILT_IN_LABS,
  BUILT_IN_FFS,
  BUILT_IN_DIV,
  BUILT_IN_LDIV,
  BUILT_IN_FFLOOR,
  BUILT_IN_FCEIL,
  BUILT_IN_FMOD,
  BUILT_IN_FREM,
  BUILT_IN_MEMCPY,
  BUILT_IN_MEMCMP,
  BUILT_IN_MEMSET,
  BUILT_IN_FSQRT,
  BUILT_IN_GETEXP,
  BUILT_IN_GETMAN,
  BUILT_IN_SAVEREGS,
  BUILT_IN_CLASSIFY_TYPE,
  BUILT_IN_NEXT_ARG,


  BUILT_IN_NEW,
  BUILT_IN_VEC_NEW,
  BUILT_IN_DELETE,
  BUILT_IN_VEC_DELETE
};
# 119 "tree.h"
typedef union tree_node *tree;
# 128 "tree.h"
struct tree_common
{
  int uid;
  union tree_node *chain;
  union tree_node *type;
  unsigned char code : 8;

  unsigned external_attr : 1;
  unsigned public_attr : 1;
  unsigned static_attr : 1;
  unsigned volatile_attr : 1;
  unsigned packed_attr : 1;
  unsigned readonly_attr : 1;
  unsigned literal_attr : 1;
  unsigned nonlocal_attr : 1;
  unsigned permanent_attr : 1;
  unsigned addressable_attr : 1;
  unsigned regdecl_attr : 1;
  unsigned this_vol_attr : 1;
  unsigned unsigned_attr : 1;
  unsigned asm_written_attr: 1;
  unsigned inline_attr : 1;
  unsigned used_attr : 1;
  unsigned lang_flag_1 : 1;
  unsigned lang_flag_2 : 1;
  unsigned lang_flag_3 : 1;
  unsigned lang_flag_4 : 1;

};
# 305 "tree.h"
struct tree_int_cst
{
  char common[sizeof (struct tree_common)];
  long int_cst_low;
  long int_cst_high;
};
# 325 "tree.h"
# 1 "real.h" 1
# 45 "real.h"
extern double ldexp ();





extern double atof ();
# 67 "real.h"
union real_extract
{
  double d;
  int i[sizeof (double) / sizeof (int)];
};
# 92 "real.h"
double real_value_from_int_cst ();
# 326 "tree.h" 2

struct tree_real_cst
{
  char common[sizeof (struct tree_common)];
  struct rtx_def *rtl;

  double real_cst;
};





struct tree_string
{
  char common[sizeof (struct tree_common)];
  struct rtx_def *rtl;

  int length;
  char *pointer;
};





struct tree_complex
{
  char common[sizeof (struct tree_common)];
  struct rtx_def *rtl;

  union tree_node *real;
  union tree_node *imag;
};






struct tree_identifier
{
  char common[sizeof (struct tree_common)];
  int length;
  char *pointer;
};





struct tree_list
{
  char common[sizeof (struct tree_common)];
  union tree_node *purpose;
  union tree_node *value;
};
# 403 "tree.h"
struct tree_exp
{
  char common[sizeof (struct tree_common)];
  int complexity;
  union tree_node *operands[1];
};
# 441 "tree.h"
struct tree_type
{
  char common[sizeof (struct tree_common)];
  union tree_node *values;
  union tree_node *sep;
  union tree_node *size;

  enum machine_mode mode : 8;
  unsigned char size_unit;
  unsigned char align;
  unsigned char sep_unit;

  union tree_node *pointer_to;
  union tree_node *reference_to;
  int parse_info;
  int symtab_address;
  union tree_node *name;
  union tree_node *max;
  union tree_node *next_variant;
  union tree_node *main_variant;
  union tree_node *basetypes;
  union tree_node *noncopied_parts;

  struct lang_type *lang_specific;
};
# 497 "tree.h"
struct tree_decl
{
  char common[sizeof (struct tree_common)];
  char *filename;
  int linenum;
  union tree_node *size;
  enum machine_mode mode : 8;
  unsigned char size_unit;
  unsigned char align;
  unsigned char voffset_unit;
  union tree_node *name;
  union tree_node *context;
  int offset;
  union tree_node *voffset;
  union tree_node *arguments;
  union tree_node *result;
  union tree_node *initial;
  char *print_name;
  char *assembler_name;
  struct rtx_def *rtl;

  int frame_size;
  struct rtx_def *saved_insns;


  int block_symtab_address;

  struct lang_decl *lang_specific;
};
# 539 "tree.h"
struct tree_stmt
{
  char common[sizeof (struct tree_common)];
  char *filename;
  int linenum;
  union tree_node *body;
};
# 555 "tree.h"
struct tree_if_stmt
{
  char common[sizeof (struct tree_common)];
  char *filename;
  int linenum;
  union tree_node *cond, *thenpart, *elsepart;
};
# 574 "tree.h"
struct tree_bind_stmt
{
  char common[sizeof (struct tree_common)];
  char *filename;
  int linenum;
  union tree_node *body, *vars, *supercontext, *bind_size, *type_tags;
  union tree_node *subblocks;
};






struct tree_case_stmt
{
  char common[sizeof (struct tree_common)];
  char *filename;
  int linenum;
  union tree_node *index, *case_list;
};





union tree_node
{
  struct tree_common common;
  struct tree_int_cst int_cst;
  struct tree_real_cst real_cst;
  struct tree_string string;
  struct tree_complex complex;
  struct tree_identifier identifier;
  struct tree_decl decl;
  struct tree_type type;
  struct tree_list list;
  struct tree_exp exp;
  struct tree_stmt stmt;
  struct tree_if_stmt if_stmt;
  struct tree_bind_stmt bind_stmt;
  struct tree_case_stmt case_stmt;
};

extern char *oballoc ();
extern char *permalloc ();





extern tree make_node ();





extern tree copy_node ();



extern tree copy_list ();




extern tree get_identifier ();



extern tree build_int_2 ();
extern tree build_real ();
extern tree build_real_from_string ();
extern tree build_real_from_int_cst ();
extern tree build_complex ();
extern tree build_string ();
extern tree build ();
extern tree build_nt ();
extern tree build_tree_list ();
extern tree build_op_identifier ();
extern tree build_decl ();
extern tree build_let ();



extern tree make_signed_type ();
extern tree make_unsigned_type ();
extern void fixup_unsigned_type ();
extern tree build_pointer_type ();
extern tree build_reference_type ();
extern tree build_index_type ();
extern tree build_array_type ();
extern tree build_function_type ();
extern tree build_method_type ();
extern tree build_offset_type ();
extern tree array_type_nelts ();



extern tree build_binary_op ();
extern tree build_indirect_ref ();
extern tree build_unary_op ();
# 684 "tree.h"
extern tree build_type_variant ();






extern void layout_type ();






extern tree type_hash_canon ();
# 708 "tree.h"
extern void layout_decl ();







extern tree fold ();





extern tree combine ();

extern tree convert ();
extern tree convert_units ();
extern tree size_in_bytes ();
extern tree genop ();
extern tree build_int ();
extern tree get_pending_sizes ();



extern tree sizetype;





extern tree chainon ();



extern tree tree_cons (), perm_tree_cons (), temp_tree_cons ();
extern tree saveable_tree_cons ();



extern tree tree_last ();



extern tree nreverse ();




extern int list_length ();



extern int integer_zerop ();



extern int integer_onep ();




extern int integer_all_onesp ();






extern int type_unsigned_p ();




extern int staticp ();




extern int lvalue_or_else ();





extern tree save_expr ();





extern tree stabilize_reference ();






extern tree get_unwidened ();






extern tree get_narrower ();






extern tree type_for_size ();






extern tree unsigned_type ();






extern tree signed_type ();



extern tree get_floating_type ();






extern char *function_cannot_inline_p ();




extern tree integer_zero_node;


extern tree integer_one_node;


extern tree size_zero_node;


extern tree size_one_node;


extern tree null_pointer_node;


extern tree error_mark_node;


extern tree void_type_node;


extern tree integer_type_node;


extern tree unsigned_type_node;


extern tree char_type_node;



extern char *input_filename;


extern int lineno;



extern int pedantic;




extern int immediate_size_expand;



extern tree current_function_decl;



extern int current_function_calls_setjmp;



extern int all_types_permanent;



extern tree expand_start_stmt_expr ();
extern tree expand_end_stmt_expr ();
extern void expand_expr_stmt (), clear_last_expr ();
extern void expand_label (), expand_goto (), expand_asm ();
extern void expand_start_cond (), expand_end_cond ();
extern void expand_start_else (), expand_end_else ();
extern void expand_start_loop (), expand_start_loop_continue_elsewhere ();
extern void expand_loop_continue_here ();
extern void expand_end_loop ();
extern int expand_continue_loop ();
extern int expand_exit_loop (), expand_exit_loop_if_false ();
extern int expand_exit_something ();

extern void expand_start_delayed_expr ();
extern tree expand_end_delayed_expr ();
extern void expand_emit_delayed_expr ();

extern void expand_null_return (), expand_return ();
extern void expand_start_bindings (), expand_end_bindings ();
extern void expand_start_case (), expand_end_case ();
extern int pushcase (), pushcase_range ();
extern void expand_start_function (), expand_end_function ();
# 38 "tree.c" 2
# 1 "obstack.h" 1
# 124 "obstack.h"
struct _obstack_chunk
{
  char *limit;
  struct _obstack_chunk *prev;
  char contents[4];
};

struct obstack
{
  long chunk_size;
  struct _obstack_chunk* chunk;
  char *object_base;
  char *next_free;
  char *chunk_limit;
  int temp;
  int alignment_mask;
  struct _obstack_chunk *(*chunkfun) ();
  void (*freefun) ();
};






void obstack_init (struct obstack *obstack);

void * obstack_alloc (struct obstack *obstack, int size);

void * obstack_copy (struct obstack *obstack, void *address, int size);
void * obstack_copy0 (struct obstack *obstack, void *address, int size);

void obstack_free (struct obstack *obstack, void *block);

void obstack_blank (struct obstack *obstack, int size);

void obstack_grow (struct obstack *obstack, void *data, int size);
void obstack_grow0 (struct obstack *obstack, void *data, int size);

void obstack_1grow (struct obstack *obstack, int data_char);
void obstack_ptr_grow (struct obstack *obstack, void *data);
void obstack_int_grow (struct obstack *obstack, int data);

void * obstack_finish (struct obstack *obstack);

int obstack_object_size (struct obstack *obstack);

int obstack_room (struct obstack *obstack);
void obstack_1grow_fast (struct obstack *obstack, int data_char);
void obstack_ptr_grow_fast (struct obstack *obstack, void *data);
void obstack_int_grow_fast (struct obstack *obstack, int data);
void obstack_blank_fast (struct obstack *obstack, int size);

void * obstack_base (struct obstack *obstack);
void * obstack_next_free (struct obstack *obstack);
int obstack_alignment_mask (struct obstack *obstack);
int obstack_chunk_size (struct obstack *obstack);
# 39 "tree.c" 2
# 1 "gvarargs.h" 1
# 47 "gvarargs.h"
typedef char * __va___list;
# 40 "tree.c" 2
# 1 "flags.h" 1
# 21 "flags.h"
extern char *main_input_filename;




enum debugger { NO_DEBUG = 0, GDB_DEBUG = 1, DBX_DEBUG = 2, SDB_DEBUG = 3,
  EXTENDED_DBX_DEBUG = 4 };

extern enum debugger write_symbols;


extern int use_gdb_dbx_extensions;



extern int optimize;





extern int obey_regdecls;




extern int quiet_flag;



extern int inhibit_warnings;



extern int extra_warnings;



extern int warn_unused;



extern int warn_shadow;



extern int warn_switch;




extern int warn_id_clash;
extern int id_clash_len;



extern int profile_flag;



extern int profile_block_flag;




extern int pedantic;





extern int flag_signed_char;



extern int flag_short_enums;





extern int flag_caller_saves;



extern int flag_pcc_struct_return;




extern int flag_force_mem;




extern int flag_force_addr;




extern int flag_defer_pop;




extern int flag_float_store;





extern int flag_combine_regs;



extern int flag_strength_reduce;




extern int flag_writable_strings;





extern int flag_no_function_cse;




extern int flag_omit_frame_pointer;







extern int frame_pointer_needed;



extern int flag_no_peephole;



extern int flag_volatile;




extern int flag_inline_functions;





extern int flag_keep_inline_functions;



extern int flag_syntax_only;



extern int flag_shared_data;



extern int flag_delayed_branch;
# 41 "tree.c" 2




extern int xmalloc ();
extern void free ();





struct obstack permanent_obstack;





struct obstack maybepermanent_obstack;




struct obstack temporary_obstack;




struct obstack momentary_obstack;



struct obstack *saveable_obstack;





struct obstack *rtl_obstack;



struct obstack *current_obstack;




struct obstack *expression_obstack;



char *maybepermanent_firstobj;
char *temporary_firstobj;
char *momentary_firstobj;



int all_types_permanent;



struct momentary_level
{

  struct momentary_level *prev;

  char *base;

  struct obstack *obstack;
};

struct momentary_level *momentary_stack;







char *tree_code_type[] = {
# 1 "tree.def" 1
# 41 "tree.def"
"x",





"x",




"x",






"x",
# 87 "tree.def"
"t",







"t",



"t",



"t",
# 115 "tree.def"
"t",



"t",



"t",



"t",





"t",



"t",






"t",


"t",
# 158 "tree.def"
"t",



"t",



"t",







"t",





"t",







"t",





"t",







"s",


"s",






"s",


"s",





"s",
# 239 "tree.def"
"s",





"s",




"s",
# 261 "tree.def"
"s",


"s",


"s",


"s",
# 281 "tree.def"
"c",


"c",




"c",



"c",
# 345 "tree.def"
"d",
"d",
"d",
"d",
"d",
"d",
"d",
"d",






"r",


"r",





"r",


"r",




"r",







"e",
# 393 "tree.def"
"e",


"e",



"e",



"e",
"e",




"e",
"e",





"e",






"e",




"e",
# 439 "tree.def"
"e",



"e",
"e",
"e",






"e",


"e",


"e",


"e",


"e",
"e",
"e",
"e",





"e",



"e",






"e",
"e",
"e",
"e",


"e",



"e",


"e",

"e",
"e",
"e",
"e",







"e",
"e",
"e",
"e",


"e",
"e",
"e",
"e",
"e",






"e",
"e",
"e",
"e",
"e",







"e",
"e",
"e",
"e",
"e",
"e",


"e",
"e",
"e",
"e",




"e",


"e",






"e",





"e",



"e",




"e",





"e",
"e",



"e",



"e",



"e",



"e",
"e",




"e",
"e",
"e",
"e",
# 121 "tree.c" 2
};
# 130 "tree.c"
int tree_code_length[] = {
# 1 "tree.def" 1
# 41 "tree.def"
0,





7,




2,






2,
# 87 "tree.def"
0,







0,



0,



0,
# 115 "tree.def"
0,



0,



0,



0,





0,



0,






0,


0,
# 158 "tree.def"
0,



0,



0,







0,





0,







0,





0,







1,


1,






1,


1,





5,
# 239 "tree.def"
6,





3,




1,
# 261 "tree.def"
3,


1,


1,


1,
# 281 "tree.def"
2,


3,




3,



3,
# 345 "tree.def"
0,
0,
0,
0,
0,
0,
0,
0,






2,


1,





2,


1,




2,







2,
# 393 "tree.def"
2,


2,



2,



2,
2,




2,
2,





3,






3,




4,
# 439 "tree.def"
3,



2,
2,
2,






2,


2,


2,


2,


2,
2,
2,
2,





2,



2,






1,
1,
1,
1,


1,



2,


1,

2,
2,
1,
1,







2,
2,
2,
2,


2,
2,
2,
2,
1,






2,
2,
2,
2,
1,







2,
2,
2,
2,
2,
2,


2,
2,
1,
2,




1,


1,






2,





2,



1,




1,





2,
2,



1,



2,



1,



1,
1,




2,
2,
2,
2,
# 132 "tree.c" 2
};




int tree_node_counter = 0;




static tree hash_table[1009];


static int do_identifier_warnings;



void
init_tree ()
{
  _obstack_begin ((&permanent_obstack), 0, 0, xmalloc, free);

  _obstack_begin ((&temporary_obstack), 0, 0, xmalloc, free);
  temporary_firstobj = (char *) ({ struct obstack *__h = (&temporary_obstack); ({ struct obstack *__o = (__h); int __len = ((0)); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); __o->next_free += __len; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });
  _obstack_begin ((&momentary_obstack), 0, 0, xmalloc, free);
  momentary_firstobj = (char *) ({ struct obstack *__h = (&momentary_obstack); ({ struct obstack *__o = (__h); int __len = ((0)); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); __o->next_free += __len; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });
  _obstack_begin ((&maybepermanent_obstack), 0, 0, xmalloc, free);
  maybepermanent_firstobj
    = (char *) ({ struct obstack *__h = (&maybepermanent_obstack); ({ struct obstack *__o = (__h); int __len = ((0)); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); __o->next_free += __len; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });

  current_obstack = &permanent_obstack;
  expression_obstack = &permanent_obstack;
  rtl_obstack = saveable_obstack = &permanent_obstack;
  tree_node_counter = 1;
  memset (hash_table,0,sizeof hash_table);
}






void
temporary_allocation ()
{
  current_obstack = &temporary_obstack;
  expression_obstack = &temporary_obstack;
  rtl_obstack = saveable_obstack = &maybepermanent_obstack;
  momentary_stack = 0;
}





void
end_temporary_allocation ()
{
  current_obstack = &permanent_obstack;
  expression_obstack = &permanent_obstack;
  rtl_obstack = saveable_obstack = &permanent_obstack;
}




void
resume_temporary_allocation ()
{
  current_obstack = &temporary_obstack;
  expression_obstack = &temporary_obstack;
  rtl_obstack = saveable_obstack = &maybepermanent_obstack;
}




int
allocation_temporary_p ()
{
  return current_obstack == &temporary_obstack;
}





void
permanent_allocation ()
{

  ({ struct obstack *__o = (&temporary_obstack); void *__obj = (temporary_firstobj); if (__obj >= (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); });
  ({ struct obstack *__o = (&momentary_obstack); void *__obj = (momentary_firstobj); if (__obj >= (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); });
  ({ struct obstack *__o = (&maybepermanent_obstack); void *__obj = (maybepermanent_firstobj); if (__obj >= (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); });

  current_obstack = &permanent_obstack;
  expression_obstack = &permanent_obstack;
  rtl_obstack = saveable_obstack = &permanent_obstack;
}



void
preserve_data ()
{
  maybepermanent_firstobj
    = (char *) ({ struct obstack *__h = (&maybepermanent_obstack); ({ struct obstack *__o = (__h); int __len = ((0)); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); __o->next_free += __len; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });
}





char *
oballoc (size)
     int size;
{
  return (char *) ({ struct obstack *__h = (current_obstack); ({ struct obstack *__o = (__h); int __len = ((size)); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); __o->next_free += __len; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });
}





void
obfree (ptr)
     char *ptr;
{
  ({ struct obstack *__o = (current_obstack); void *__obj = (ptr); if (__obj >= (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); });
}




char *
permalloc (size)
     long size;
{
  return (char *) ({ struct obstack *__h = (&permanent_obstack); ({ struct obstack *__o = (__h); int __len = ((size)); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); __o->next_free += __len; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });
}




char *
savealloc (size)
     int size;
{
  return (char *) ({ struct obstack *__h = (saveable_obstack); ({ struct obstack *__o = (__h); int __len = ((size)); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); __o->next_free += __len; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });
}






void
push_momentary ()
{
  struct momentary_level *tem
    = (struct momentary_level *) ({ struct obstack *__h = (&momentary_obstack); ({ struct obstack *__o = (__h); int __len = ((sizeof (struct momentary_level))); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); __o->next_free += __len; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });

  tem->prev = momentary_stack;
  tem->base = (char *) ((&momentary_obstack)->object_base);
  tem->obstack = expression_obstack;
  momentary_stack = tem;
  expression_obstack = &momentary_obstack;
}




void
clear_momentary ()
{
  ({ struct obstack *__o = (&momentary_obstack); void *__obj = (momentary_stack->base); if (__obj >= (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); });
}






void
pop_momentary ()
{
  struct momentary_level *tem = momentary_stack;
  momentary_stack = tem->prev;
  ({ struct obstack *__o = (&momentary_obstack); void *__obj = (tem); if (__obj >= (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); });
  expression_obstack = tem->obstack;
}





int
suspend_momentary ()
{
  register int tem = expression_obstack == &momentary_obstack;
  expression_obstack = saveable_obstack;
  return tem;
}






void
resume_momentary (yes)
     int yes;
{
  if (yes)
    expression_obstack = &momentary_obstack;
}
# 356 "tree.c"
tree
make_node (code)
     enum tree_code code;
{
  register tree t;
  register int type = *tree_code_type[(int) code];
  register int length;
  register struct obstack *obstack = current_obstack;
  register int i;

  switch (type)
    {
    case 'd':
      length = sizeof (struct tree_decl);

      if (obstack != &permanent_obstack)
 obstack = saveable_obstack;



      else if (code == PARM_DECL)
 obstack = &maybepermanent_obstack;
      break;

    case 't':
      length = sizeof (struct tree_type);

      if (obstack != &permanent_obstack)
 obstack = all_types_permanent ? &permanent_obstack : saveable_obstack;
      break;

    case 's':
      length = sizeof (struct tree_common)
 + 2 * sizeof (int)
   + tree_code_length[(int) code] * sizeof (char *);

      if (obstack != &permanent_obstack)
 obstack = saveable_obstack;
      break;

    case 'r':
    case 'e':
      obstack = expression_obstack;
      length = sizeof (struct tree_exp)
 + (tree_code_length[(int) code] - 1) * sizeof (char *);
      break;

    case 'c':
      obstack = expression_obstack;


      if (code == REAL_CST)
 {
   length = sizeof (struct tree_real_cst);
   break;
 }

    case 'x':
      length = sizeof (struct tree_common)
 + tree_code_length[(int) code] * sizeof (char *);


      if (code == IDENTIFIER_NODE) obstack = &permanent_obstack;
    }

  t = (tree) ({ struct obstack *__h = (obstack); ({ struct obstack *__o = (__h); int __len = ((length)); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); __o->next_free += __len; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });

  ((t)->common.uid) = tree_node_counter++;
  ((t)->common.type) = 0;
  ((t)->common.chain) = 0;
  for (i = (length / sizeof (int)) - 1;
       i >= sizeof (struct tree_common) / sizeof (int) - 1;
       i--)
    ((int *) t)[i] = 0;

  ((t)->common.code = (int) (code));
  if (obstack == &permanent_obstack)
    ((t)->common.permanent_attr) = 1;

  if (type == 'd')
    {
      extern int lineno;

      ((t)->decl.align) = 1;
      ((t)->decl.size_unit) = 1;
      ((t)->decl.voffset_unit) = 1;
      ((t)->decl.linenum) = lineno;
      ((t)->decl.filename) = input_filename;
    }

  if (type == 't')
    {
      ((t)->type.align) = 1;
      ((t)->type.size_unit) = 1;
      ((t)->type.main_variant) = t;
    }

  if (type == 'c')
    {
      ((t)->common.literal_attr) = 1;
    }

  return t;
}




tree
copy_node (node)
     tree node;
{
  register tree t;
  register enum tree_code code = ((enum tree_code) (node)->common.code);
  register int length;
  register int i;

  switch (*tree_code_type[(int) code])
    {
    case 'd':
      length = sizeof (struct tree_decl);
      break;

    case 't':
      length = sizeof (struct tree_type);
      break;

    case 's':
      length = sizeof (struct tree_common)
 + 2 * sizeof (int)
   + tree_code_length[(int) code] * sizeof (char *);
      break;

    case 'r':
    case 'e':
      length = sizeof (struct tree_exp)
 + (tree_code_length[(int) code] - 1) * sizeof (char *);
      break;

    case 'c':


      if (code == REAL_CST)
 {
   length = sizeof (struct tree_real_cst);
   break;
 }

    case 'x':
      length = sizeof (struct tree_common)
 + tree_code_length[(int) code] * sizeof (char *);
    }

  t = (tree) ({ struct obstack *__h = (current_obstack); ({ struct obstack *__o = (__h); int __len = ((length)); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); __o->next_free += __len; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });

  for (i = ((length + sizeof (int) - 1) / sizeof (int)) - 1;
       i >= 0;
       i--)
    ((int *) t)[i] = ((int *) node)[i];

  ((t)->common.uid) = tree_node_counter++;
  ((t)->common.chain) = 0;

  ((t)->common.permanent_attr) = (current_obstack == &permanent_obstack);

  return t;
}




tree
copy_list (list)
     tree list;
{
  tree head;
  register tree prev, next;

  if (list == 0)
    return 0;

  head = prev = copy_node (list);
  next = ((list)->common.chain);
  while (next)
    {
      ((prev)->common.chain) = copy_node (next);
      prev = ((prev)->common.chain);
      next = ((next)->common.chain);
    }
  return head;
}







tree
get_identifier (text)
     register char *text;
{
  register int hi;
  register int i;
  register tree idp;
  register int len, hash_len;


  for (len = 0; text[len]; len++);


  hash_len = len;
  if (warn_id_clash && len > id_clash_len)
    hash_len = id_clash_len;


  hi = hash_len;
  for (i = 0; i < hash_len; i++)
    hi = ((hi * 613) + (unsigned)(text[i]));

  hi &= (1 << 30) - 1;
  hi %= 1009;


  for (idp = hash_table[hi]; idp; idp = ((idp)->common.chain))
    if (((idp)->identifier.length) == len
 && !strcmp (((idp)->identifier.pointer), text))
      return idp;


  if (warn_id_clash && do_identifier_warnings && len >= id_clash_len)
    for (idp = hash_table[hi]; idp; idp = ((idp)->common.chain))
      if (!strncmp (((idp)->identifier.pointer), text, id_clash_len))
 {
   warning ("`%s' and `%s' identical in first n characters",
     ((idp)->identifier.pointer), text);
   break;
 }


  idp = make_node (IDENTIFIER_NODE);
  ((idp)->identifier.length) = len;

  ((idp)->identifier.pointer) = ({ struct obstack *__h = (&permanent_obstack); ({ struct obstack *__o = (__h); int __len = ((len)); ((__o->next_free + __len + 1 > __o->chunk_limit) ? _obstack_newchunk (__o, __len + 1) : 0), memcpy (__o->next_free,(text),__len), __o->next_free += __len, *(__o->next_free)++ = 0; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });

  ((idp)->common.chain) = hash_table[hi];
  hash_table[hi] = idp;
  return idp;
}




void
start_identifier_warnings ()
{
  do_identifier_warnings = 1;
}




void
set_identifier_size (size)
     int size;
{
  tree_code_length[(int) IDENTIFIER_NODE] = size;
}





tree
build_int_2 (low, hi)
     int low, hi;
{
  register tree t = make_node (INTEGER_CST);
  ((t)->int_cst.int_cst_low) = low;
  ((t)->int_cst.int_cst_high) = hi;
  ((t)->common.type) = integer_type_node;
  return t;
}



tree
build_real (type, d)
     tree type;
     double d;
{
  tree v;







  v = make_node (REAL_CST);
  ((v)->common.type) = type;
  ((v)->real_cst.real_cst) = d;
  return v;
}






double
real_value_from_int_cst (i)
     tree i;
{
  double d;



  if (((i)->int_cst.int_cst_high) < 0)
    {

      d = (double) (~ ((i)->int_cst.int_cst_high));
      d *= ((double) (1 << (32 / 2))
     * (double) (1 << (32 / 2)));



      if (((~ ((i)->int_cst.int_cst_low)) & ((unsigned)1 << (32 - 1))) != 0)
 d += ((double) ((unsigned)1 << (32 - 1)) + (double) ((~ ((unsigned)1 << (32 - 1))) & ~ ((i)->int_cst.int_cst_low)));
      else
 d += (double) (unsigned) (~ ((i)->int_cst.int_cst_low));

      d = (- d - 1.0);
    }
  else
    {
      d = (double) ((i)->int_cst.int_cst_high);
      d *= ((double) (1 << (32 / 2))
     * (double) (1 << (32 / 2)));
      if ((((i)->int_cst.int_cst_low) & ((unsigned)1 << (32 - 1))) != 0)
 d += ((double) ((unsigned)1 << (32 - 1)) + (double) ((~ ((unsigned)1 << (32 - 1))) & ((i)->int_cst.int_cst_low)));
      else
 d += (double) (unsigned) ((i)->int_cst.int_cst_low);
    }


  return d;
}




tree
build_real_from_int_cst (type, i)
     tree type;
     tree i;
{
  tree v;
  double d;

  v = make_node (REAL_CST);
  ((v)->common.type) = type;

  d = real_value_from_int_cst (i);






  ((v)->real_cst.real_cst) = d;
  return v;
}







tree
build_string (len, str)
     int len;
     char *str;
{
  register tree s = make_node (STRING_CST);
  ((s)->string.length) = len;
  ((s)->string.pointer) = ({ struct obstack *__h = (saveable_obstack); ({ struct obstack *__o = (__h); int __len = ((len)); ((__o->next_free + __len + 1 > __o->chunk_limit) ? _obstack_newchunk (__o, __len + 1) : 0), memcpy (__o->next_free,(str),__len), __o->next_free += __len, *(__o->next_free)++ = 0; (void) 0; }); ({ struct obstack *__o = (__h); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0)+__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0); ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }); });
  return s;
}






tree
build_complex (real, imag)
     tree real, imag;
{
  register tree t = make_node (COMPLEX_CST);
  ((t)->complex.real) = real;
  ((t)->complex.imag) = imag;
  return t;
}



int
integer_zerop (expr)
     tree expr;
{
  return (((enum tree_code) (expr)->common.code) == INTEGER_CST
   && ((expr)->int_cst.int_cst_low) == 0
   && ((expr)->int_cst.int_cst_high) == 0);
}



int
integer_onep (expr)
     tree expr;
{
  return (((enum tree_code) (expr)->common.code) == INTEGER_CST
   && ((expr)->int_cst.int_cst_low) == 1
   && ((expr)->int_cst.int_cst_high) == 0);
}




int
integer_all_onesp (expr)
     tree expr;
{
  register int prec;
  register int uns;

  if (((enum tree_code) (expr)->common.code) != INTEGER_CST)
    return 0;

  uns = ((((expr)->common.type))->common.unsigned_attr);
  if (!uns)
    return ((expr)->int_cst.int_cst_low) == -1 && ((expr)->int_cst.int_cst_high) == -1;

  prec = ((((expr)->common.type))->type.sep_unit);
  if (prec >= 32)
    return ((expr)->int_cst.int_cst_low) == -1
      && ((expr)->int_cst.int_cst_high) == (1 << (prec - 32)) - 1;
  else
    return ((expr)->int_cst.int_cst_low) == (1 << prec) - 1;
}





int
list_length (t)
     tree t;
{
  register tree tail;
  register int len = 0;

  for (tail = t; tail; tail = ((tail)->common.chain))
    len++;

  return len;
}





tree
chainon (op1, op2)
     tree op1, op2;
{
  tree t;

  if (op1)
    {
      for (t = op1; ((t)->common.chain); t = ((t)->common.chain))
 if (t == op2) abort ();
      ((t)->common.chain) = op2;
      return op1;
    }
  else return op2;
}




tree
build_tree_list (parm, value)
     tree parm, value;
{
  register tree t = make_node (TREE_LIST);
  ((t)->list.purpose) = parm;
  ((t)->list.value) = value;
  return t;
}





tree
tree_cons (purpose, value, chain)
     tree purpose, value, chain;
{
  register tree node = make_node (TREE_LIST);
  ((node)->common.chain) = chain;
  ((node)->list.purpose) = purpose;
  ((node)->list.value) = value;
  return node;
}



tree
perm_tree_cons (purpose, value, chain)
     tree purpose, value, chain;
{
  register tree node;
  register struct obstack *ambient_obstack = current_obstack;
  current_obstack = &permanent_obstack;

  node = make_node (TREE_LIST);
  ((node)->common.chain) = chain;
  ((node)->list.purpose) = purpose;
  ((node)->list.value) = value;

  current_obstack = ambient_obstack;
  return node;
}



tree
temp_tree_cons (purpose, value, chain)
     tree purpose, value, chain;
{
  register tree node;
  register struct obstack *ambient_obstack = current_obstack;
  current_obstack = &temporary_obstack;

  node = make_node (TREE_LIST);
  ((node)->common.chain) = chain;
  ((node)->list.purpose) = purpose;
  ((node)->list.value) = value;

  current_obstack = ambient_obstack;
  return node;
}



tree
saveable_tree_cons (purpose, value, chain)
     tree purpose, value, chain;
{
  register tree node;
  register struct obstack *ambient_obstack = current_obstack;
  current_obstack = saveable_obstack;

  node = make_node (TREE_LIST);
  ((node)->common.chain) = chain;
  ((node)->list.purpose) = purpose;
  ((node)->list.value) = value;

  current_obstack = ambient_obstack;
  return node;
}



tree
tree_last (chain)
     register tree chain;
{
  register tree next;
  if (chain)
    while (next = ((chain)->common.chain))
      chain = next;
  return chain;
}




tree
nreverse (t)
     tree t;
{
  register tree prev = 0, decl, next;
  for (decl = t; decl; decl = next)
    {
      next = ((decl)->common.chain);
      ((decl)->common.chain) = prev;
      prev = decl;
    }
  return prev;
}







tree
size_in_bytes (type)
     tree type;
{
  if (type == error_mark_node)
    return integer_zero_node;
  type = ((type)->type.main_variant);
  if (((type)->type.size) == 0)
    {
      incomplete_type_error (0, type);
      return integer_zero_node;
    }
  return convert_units (((type)->type.size), ((type)->type.size_unit),
   8);
}




int
int_size_in_bytes (type)
     tree type;
{
  int size;
  if (type == error_mark_node)
    return 0;
  type = ((type)->type.main_variant);
  if (((type)->type.size) == 0)
    return -1;
  if (((enum tree_code) (((type)->type.size))->common.code) != INTEGER_CST)
    return -1;
  size = ((((type)->type.size))->int_cst.int_cst_low) * ((type)->type.size_unit);
  return (size + 8 - 1) / 8;
}




tree
array_type_nelts (type)
     tree type;
{
  tree index_type = ((type)->type.values);
  return (tree_int_cst_equal (((index_type)->type.sep), integer_zero_node)
   ? ((index_type)->type.max)
   : fold (build (MINUS_EXPR, integer_type_node,
    ((index_type)->type.max),
    ((index_type)->type.sep))));
}




int
staticp (arg)
     tree arg;
{
  register enum tree_code code = ((enum tree_code) (arg)->common.code);

  if ((code == VAR_DECL || code == FUNCTION_DECL || code == CONSTRUCTOR)
      && (((arg)->common.static_attr) || ((arg)->common.external_attr)))
    return 1;

  if (code == STRING_CST)
    return 1;

  if (code == COMPONENT_REF)
    return (((((arg)->exp.operands[1]))->decl.voffset) == 0
     && staticp (((arg)->exp.operands[0])));

  if (code == INDIRECT_REF)
    return ((((arg)->exp.operands[0]))->common.literal_attr);

  if (code == ARRAY_REF)
    {
      if (((enum tree_code) (((((arg)->common.type))->type.size))->common.code) == INTEGER_CST
   && ((enum tree_code) (((arg)->exp.operands[1]))->common.code) == INTEGER_CST)
 return staticp (((arg)->exp.operands[0]));
    }

  return 0;
}





int
lvalue_p (ref)
     tree ref;
{
  register enum tree_code code = ((enum tree_code) (ref)->common.code);

  if (language_lvalue_valid (ref))
    switch (code)
      {
      case COMPONENT_REF:
 return lvalue_p (((ref)->exp.operands[0]));

      case STRING_CST:
 return 1;

      case INDIRECT_REF:
      case ARRAY_REF:
      case VAR_DECL:
      case PARM_DECL:
      case RESULT_DECL:
      case ERROR_MARK:
 if (((enum tree_code) (((ref)->common.type))->common.code) != FUNCTION_TYPE
     && ((enum tree_code) (((ref)->common.type))->common.code) != METHOD_TYPE)
   return 1;
 break;

      case NEW_EXPR:
 return 1;

      case CALL_EXPR:
 if (((enum tree_code) (((ref)->common.type))->common.code) == REFERENCE_TYPE)
   return 1;
      }
  return 0;
}




int
lvalue_or_else (ref, string)
     tree ref;
     char *string;
{
  int win = lvalue_p (ref);
  if (! win)
    error ("invalid lvalue in %s", string);
  return win;
}






tree
save_expr (expr)
     tree expr;
{
  register tree t = fold (expr);






  if (((t)->common.literal_attr) || (((t)->common.readonly_attr) && !((t)->common.volatile_attr))
      || ((enum tree_code) (t)->common.code) == SAVE_EXPR)
    return t;

  return build (SAVE_EXPR, ((expr)->common.type), t, ((void *)0));
}
# 1134 "tree.c"
tree
stabilize_reference (ref)
     tree ref;
{
  register tree result;
  register enum tree_code code = ((enum tree_code) (ref)->common.code);

  switch (code)
    {
    case VAR_DECL:
    case PARM_DECL:
    case RESULT_DECL:
      result = ref;
      break;

    case NOP_EXPR:
    case CONVERT_EXPR:
    case FLOAT_EXPR:
    case FIX_TRUNC_EXPR:
    case FIX_FLOOR_EXPR:
    case FIX_ROUND_EXPR:
    case FIX_CEIL_EXPR:
      result = build_nt (code, stabilize_reference (((ref)->exp.operands[0])));
      break;

    case INDIRECT_REF:
      result = build_nt (INDIRECT_REF, save_expr (((ref)->exp.operands[0])));
      break;

    case COMPONENT_REF:
      result = build_nt (COMPONENT_REF,
    stabilize_reference (((ref)->exp.operands[0])),
    ((ref)->exp.operands[1]));
      break;

    case ARRAY_REF:
      result = build_nt (ARRAY_REF, stabilize_reference (((ref)->exp.operands[0])),
    save_expr (((ref)->exp.operands[1])));
      break;



    default:
      return ref;

    case ERROR_MARK:
      return error_mark_node;
    }

  ((result)->common.type) = ((ref)->common.type);
  ((result)->common.readonly_attr) = ((ref)->common.readonly_attr);
  ((result)->common.volatile_attr) = ((ref)->common.volatile_attr);
  ((result)->common.this_vol_attr) = ((ref)->common.this_vol_attr);

  return result;
}
# 1198 "tree.c"
tree
build (__builtin_va_alist)
     int __builtin_va_alist;
{
  register __va___list p;
  enum tree_code code;
  register tree t;
  register int length;
  register int i;

  p=(char *) &__builtin_va_alist;

  code = (*((enum tree_code *) (p += (((sizeof (enum tree_code) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)), p - (((sizeof (enum tree_code) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)))));
  t = make_node (code);
  length = tree_code_length[(int) code];
  ((t)->common.type) = (*((tree *) (p += (((sizeof (tree) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)), p - (((sizeof (tree) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)))));

  if (length == 2)
    {

      register tree arg0 = (*((tree *) (p += (((sizeof (tree) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)), p - (((sizeof (tree) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)))));
      register tree arg1 = (*((tree *) (p += (((sizeof (tree) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)), p - (((sizeof (tree) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)))));
      ((t)->exp.operands[0]) = arg0;
      ((t)->exp.operands[1]) = arg1;
      ((t)->common.volatile_attr)
 = (arg0 && ((arg0)->common.volatile_attr)) || (arg1 && ((arg1)->common.volatile_attr));
    }
  else
    {
      for (i = 0; i < length; i++)
 {
   register tree operand = (*((tree *) (p += (((sizeof (tree) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)), p - (((sizeof (tree) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)))));
   ((t)->exp.operands[i]) = operand;
   if (operand && ((operand)->common.volatile_attr))
     ((t)->common.volatile_attr) = 1;
 }
    }
  ;
  return t;
}






tree
build_nt (__builtin_va_alist)
     int __builtin_va_alist;
{
  register __va___list p;
  register enum tree_code code;
  register tree t;
  register int length;
  register int i;

  p=(char *) &__builtin_va_alist;

  code = (*((enum tree_code *) (p += (((sizeof (enum tree_code) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)), p - (((sizeof (enum tree_code) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)))));
  t = make_node (code);
  length = tree_code_length[(int) code];

  for (i = 0; i < length; i++)
    ((t)->exp.operands[i]) = (*((tree *) (p += (((sizeof (tree) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)), p - (((sizeof (tree) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)))));

  ;
  return t;
}

tree
build_op_identifier (op1, op2)
     tree op1, op2;
{
  register tree t = make_node (OP_IDENTIFIER);
  ((t)->list.purpose) = op1;
  ((t)->list.value) = op2;
  return t;
}







tree
build_decl (code, name, type)
     enum tree_code code;
     tree name, type;
{
  register tree t;

  t = make_node (code);






  ((t)->decl.name) = name;
  if (name)
    {
      ((t)->decl.print_name) = ((name)->identifier.pointer);
      ((t)->decl.assembler_name) = ((name)->identifier.pointer);
    }
  ((t)->common.type) = type;
  ((t)->decl.arguments) = (tree) ((void *)0);
  ((t)->decl.initial) = (tree) ((void *)0);

  if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
    layout_decl (t, 0);
  else if (code == FUNCTION_DECL)
    ((t)->decl.mode) = QImode;

  return t;
}
# 1450 "tree.c"
tree
build_let (filename, line, vars, subblocks, supercontext, tags)
     char *filename;
     int line;
     tree vars, subblocks, supercontext, tags;
{
  register tree t = make_node (LET_STMT);
  ((t)->stmt.filename) = filename;
  ((t)->stmt.linenum) = line;
  ((t)->bind_stmt.vars) = vars;
  ((t)->bind_stmt.subblocks) = subblocks;
  ((t)->bind_stmt.supercontext) = supercontext;
  ((t)->bind_stmt.bind_size) = 0;
  ((t)->bind_stmt.type_tags) = tags;
  return t;
}
# 1480 "tree.c"
tree
build_type_variant (type, constp, volatilep)
     tree type;
     int constp, volatilep;
{
  register tree t, m = ((type)->type.main_variant);
  register struct obstack *ambient_obstack = current_obstack;


  constp = !!constp;
  volatilep = !!volatilep;



  for (t = m; t; t = ((t)->type.next_variant))
    if (constp == ((t)->common.readonly_attr)
 && volatilep == ((t)->common.volatile_attr))
      return t;


  current_obstack
    = ((type)->common.permanent_attr) ? &permanent_obstack : saveable_obstack;

  t = copy_node (type);
  ((t)->common.readonly_attr) = constp;
  ((t)->common.volatile_attr) = volatilep;
  ((t)->type.pointer_to) = 0;
  ((t)->type.reference_to) = 0;


  ((t)->type.next_variant) = ((m)->type.next_variant);
  ((m)->type.next_variant) = t;

  current_obstack = ambient_obstack;
  return t;
}







struct type_hash
{
  struct type_hash *next;
  int hashcode;
  tree type;
};
# 1538 "tree.c"
struct type_hash *type_hash_table[59];
# 1548 "tree.c"
int
type_hash_list (list)
     tree list;
{
  register int hashcode;
  register tree tail;
  for (hashcode = 0, tail = list; tail; tail = ((tail)->common.chain))
    hashcode += ((((tail)->list.value))->common.uid);
  return hashcode;
}




tree
type_hash_lookup (hashcode, type)
     int hashcode;
     tree type;
{
  register struct type_hash *h;
  for (h = type_hash_table[hashcode % 59]; h; h = h->next)
    if (h->hashcode == hashcode
 && ((enum tree_code) (h->type)->common.code) == ((enum tree_code) (type)->common.code)
 && ((h->type)->common.type) == ((type)->common.type)
 && (((h->type)->type.max) == ((type)->type.max)
     || tree_int_cst_equal (((h->type)->type.max),
       ((type)->type.max)))
 && (((h->type)->type.sep) == ((type)->type.sep)
     || tree_int_cst_equal (((h->type)->type.sep),
       ((type)->type.sep)))
 && (((h->type)->type.values) == ((type)->type.values)
     || (((enum tree_code) (((h->type)->type.values))->common.code) == TREE_LIST
  && ((enum tree_code) (((type)->type.values))->common.code) == TREE_LIST
  && type_list_equal (((h->type)->type.values), ((type)->type.values)))))
      return h->type;
  return 0;
}




void
type_hash_add (hashcode, type)
     int hashcode;
     tree type;
{
  register struct type_hash *h;

  h = (struct type_hash *) oballoc (sizeof (struct type_hash));
  h->hashcode = hashcode;
  h->type = type;
  h->next = type_hash_table[hashcode % 59];
  type_hash_table[hashcode % 59] = h;
}
# 1615 "tree.c"
int debug_no_type_hash = 0;

tree
type_hash_canon (hashcode, type)
     int hashcode;
     tree type;
{
  tree t1;

  if (debug_no_type_hash)
    return type;

  t1 = type_hash_lookup (hashcode, type);
  if (t1 != 0)
    {
      struct obstack *o
 = ((type)->common.permanent_attr) ? &permanent_obstack : saveable_obstack;
      ({ struct obstack *__o = (o); void *__obj = (type); if (__obj >= (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); });
      return t1;
    }


  if (current_obstack == &permanent_obstack)
    type_hash_add (hashcode, type);

  return type;
}






int
type_list_equal (l1, l2)
     tree l1, l2;
{
  register tree t1, t2;
  for (t1 = l1, t2 = l2; t1 && t2; t1 = ((t1)->common.chain), t2 = ((t2)->common.chain))
    {
      if (((t1)->list.value) != ((t2)->list.value))
 return 0;
      if (((t1)->list.purpose) != ((t2)->list.purpose)
   && !simple_cst_equal (((t1)->list.purpose), ((t2)->list.purpose)))
 return 0;
    }

  return t1 == t2;
}




int
tree_int_cst_equal (t1, t2)
     tree t1, t2;
{
  if (t1 == t2)
    return 1;
  if (t1 == 0 || t2 == 0)
    return 0;
  if (((enum tree_code) (t1)->common.code) == INTEGER_CST
      && ((enum tree_code) (t2)->common.code) == INTEGER_CST
      && ((t1)->int_cst.int_cst_low) == ((t2)->int_cst.int_cst_low)
      && ((t1)->int_cst.int_cst_high) == ((t2)->int_cst.int_cst_high))
    return 1;
  return 0;
}




int
tree_int_cst_lt (t1, t2)
     tree t1, t2;
{
  if (t1 == t2)
    return 0;

  if (!((((t1)->common.type))->common.unsigned_attr))
    return (((t1)->int_cst.int_cst_high) < ((t2)->int_cst.int_cst_high) || (((t1)->int_cst.int_cst_high) == ((t2)->int_cst.int_cst_high) && ((unsigned) ((t1)->int_cst.int_cst_low) < (unsigned) ((t2)->int_cst.int_cst_low))));
  return ((unsigned) ((t1)->int_cst.int_cst_high) < (unsigned) ((t2)->int_cst.int_cst_high) || ((unsigned) ((t1)->int_cst.int_cst_high) == (unsigned) ((t2)->int_cst.int_cst_high) && ((unsigned) ((t1)->int_cst.int_cst_low) < (unsigned) ((t2)->int_cst.int_cst_low))));
}



int
simple_cst_equal (t1, t2)
     tree t1, t2;
{
  register enum tree_code code1, code2;

  if (t1 == t2)
    return 1;
  if (t1 == 0 || t2 == 0)
    return 0;

  code1 = ((enum tree_code) (t1)->common.code);
  code2 = ((enum tree_code) (t2)->common.code);

  if (code1 == NOP_EXPR || code1 == CONVERT_EXPR)
    if (code2 == NOP_EXPR || code2 == CONVERT_EXPR)
      return simple_cst_equal (((t1)->exp.operands[0]), ((t2)->exp.operands[0]));
    else
      return simple_cst_equal (((t1)->exp.operands[0]), t2);
  else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR)
    return simple_cst_equal (t1, ((t2)->exp.operands[0]));

  if (code1 != code2)
    return 0;

  switch (code1)
    {
    case INTEGER_CST:
      return ((t1)->int_cst.int_cst_low) == ((t2)->int_cst.int_cst_low)
 && ((t1)->int_cst.int_cst_high) == ((t2)->int_cst.int_cst_high);

    case REAL_CST:
      return ((((t1)->real_cst.real_cst)) == (((t2)->real_cst.real_cst)));

    case STRING_CST:
      return ((t1)->string.length) == ((t2)->string.length)
 && !strcmp (((t1)->string.pointer), ((t2)->string.pointer));

    case CONSTRUCTOR:
      abort ();

    case VAR_DECL:
    case PARM_DECL:
    case CONST_DECL:
      return 0;

    case PLUS_EXPR:
    case MINUS_EXPR:
    case MULT_EXPR:
    case TRUNC_DIV_EXPR:
    case TRUNC_MOD_EXPR:
    case LSHIFT_EXPR:
    case RSHIFT_EXPR:
      return (simple_cst_equal (((t1)->exp.operands[0]), ((t2)->exp.operands[0]))
       && simple_cst_equal (((t1)->exp.operands[1]), ((t2)->exp.operands[1])));

    case NEGATE_EXPR:
    case ADDR_EXPR:
    case REFERENCE_EXPR:
    case INDIRECT_REF:
      return simple_cst_equal (((t1)->exp.operands[0]), ((t2)->exp.operands[0]));

    default:
      abort ();
    }
}
# 1775 "tree.c"
tree
build_pointer_type (to_type)
     tree to_type;
{
  register tree t = ((to_type)->type.pointer_to);
  register struct obstack *ambient_obstack = current_obstack;
  register struct obstack *ambient_saveable_obstack = saveable_obstack;



  if (t)
    return t;


  if (((to_type)->common.permanent_attr))
    {
      current_obstack = &permanent_obstack;
      saveable_obstack = &permanent_obstack;
    }

  t = make_node (POINTER_TYPE);
  ((t)->common.type) = to_type;


  ((to_type)->type.pointer_to) = t;




  layout_type (t);

  current_obstack = ambient_obstack;
  saveable_obstack = ambient_saveable_obstack;
  return t;
}





tree
build_index_type (maxval)
     tree maxval;
{
  register tree itype = make_node (INTEGER_TYPE);
  ((itype)->type.sep_unit) = 32;
  ((itype)->type.sep) = build_int_2 (0, 0);
  ((((itype)->type.sep))->common.type) = sizetype;
  ((itype)->type.max) = convert (sizetype, maxval);
  ((itype)->type.mode) = SImode;
  ((itype)->type.size) = ((sizetype)->type.size);
  ((itype)->type.size_unit) = ((sizetype)->type.size_unit);
  ((itype)->type.align) = ((sizetype)->type.align);
  if (((enum tree_code) (maxval)->common.code) == INTEGER_CST)
    {
      int maxint = ((maxval)->int_cst.int_cst_low);
      return type_hash_canon (maxint > 0 ? maxint : - maxint, itype);
    }
  else
    return itype;
}





tree
build_array_type (elt_type, index_type)
     tree elt_type, index_type;
{
  register tree t = make_node (ARRAY_TYPE);
  int hashcode;

  if (((enum tree_code) (elt_type)->common.code) == FUNCTION_TYPE)
    {
      error ("arrays of functions are not meaningful");
      elt_type = integer_type_node;
    }

  ((t)->common.type) = elt_type;
  ((t)->type.values) = index_type;


  build_pointer_type (elt_type);





  if (index_type == 0)
    return t;

  hashcode = ((elt_type)->common.uid) + ((index_type)->common.uid);
  t = type_hash_canon (hashcode, t);

  if (((t)->type.size) == 0)
    layout_type (t);
  return t;
}
# 1882 "tree.c"
tree
build_function_type (value_type, arg_types)
     tree value_type, arg_types;
{
  register tree t;
  int hashcode;

  if (((enum tree_code) (value_type)->common.code) == FUNCTION_TYPE
      || ((enum tree_code) (value_type)->common.code) == ARRAY_TYPE)
    {
      error ("function return type cannot be function or array");
      value_type = integer_type_node;
    }


  t = make_node (FUNCTION_TYPE);
  ((t)->common.type) = value_type;
  ((t)->type.values) = arg_types;


  hashcode = ((value_type)->common.uid) + type_hash_list (arg_types);
  t = type_hash_canon (hashcode, t);

  if (((t)->type.size) == 0)
    layout_type (t);
  return t;
}



tree
build_reference_type (to_type)
     tree to_type;
{
  register tree t = ((to_type)->type.reference_to);
  register struct obstack *ambient_obstack = current_obstack;
  register struct obstack *ambient_saveable_obstack = saveable_obstack;



  if (t)
    return t;


  if (((to_type)->common.permanent_attr))
    {
      current_obstack = &permanent_obstack;
      saveable_obstack = &permanent_obstack;
    }

  t = make_node (REFERENCE_TYPE);
  ((t)->common.type) = to_type;


  ((to_type)->type.reference_to) = t;

  layout_type (t);

  current_obstack = ambient_obstack;
  saveable_obstack = ambient_saveable_obstack;
  return t;
}






tree
build_method_type (basetype, type)
     tree basetype, type;
{
  register tree t;
  int hashcode;


  t = make_node (METHOD_TYPE);

  if (((enum tree_code) (type)->common.code) != FUNCTION_TYPE)
    abort ();

  ((t)->type.max) = basetype;
  ((t)->common.type) = ((type)->common.type);




  ((t)->type.values)
    = tree_cons (((void *)0), build_pointer_type (basetype), ((type)->type.values));


  hashcode = ((basetype)->common.uid) + ((type)->common.uid);
  t = type_hash_canon (hashcode, t);

  if (((t)->type.size) == 0)
    layout_type (t);

  return t;
}






tree
build_offset_type (basetype, type)
     tree basetype, type;
{
  register tree t;
  int hashcode;


  t = make_node (OFFSET_TYPE);

  ((t)->type.max) = basetype;
  ((t)->common.type) = type;


  hashcode = ((basetype)->common.uid) + ((type)->common.uid);
  t = type_hash_canon (hashcode, t);

  if (((t)->type.size) == 0)
    layout_type (t);

  return t;
}
# 2033 "tree.c"
tree
get_unwidened (op, for_type)
     register tree op;
     tree for_type;
{



  register tree type = ((op)->common.type);
  register int final_prec = ((for_type != 0 ? for_type : type)->type.sep_unit);
  register int uns
    = (for_type != 0 && for_type != type
       && final_prec > ((type)->type.sep_unit)
       && ((type)->common.unsigned_attr));
  register tree win = op;

  while (((enum tree_code) (op)->common.code) == NOP_EXPR)
    {
      register int bitschange
 = ((((op)->common.type))->type.sep_unit)
   - ((((((op)->exp.operands[0]))->common.type))->type.sep_unit);



      if (bitschange < 0
   && final_prec > ((((op)->common.type))->type.sep_unit))
 break;



      op = ((op)->exp.operands[0]);
# 2072 "tree.c"
      if (bitschange > 0)
 {
   if (! uns || final_prec <= ((((op)->common.type))->type.sep_unit))
     win = op;



   if ((uns || ((enum tree_code) (op)->common.code) == NOP_EXPR)
       && ((((op)->common.type))->common.unsigned_attr))
     {
       uns = 1;
       win = op;
     }
 }
    }

  if (((enum tree_code) (op)->common.code) == COMPONENT_REF

      && ((enum tree_code) (type)->common.code) != REAL_TYPE)
    {
      int innerprec = (((((((op)->exp.operands[1]))->decl.size))->int_cst.int_cst_low)
         * ((((op)->exp.operands[1]))->decl.size_unit));
      type = type_for_size (innerprec, ((((op)->exp.operands[1]))->common.unsigned_attr));







      if (innerprec < ((((op)->common.type))->type.sep_unit)
   && (for_type || ((((op)->exp.operands[1]))->decl.mode) != BImode)
   && (! uns || final_prec <= innerprec
       || ((((op)->exp.operands[1]))->common.unsigned_attr))
   && type != 0)
 {
   win = build (COMPONENT_REF, type, ((op)->exp.operands[0]),
         ((op)->exp.operands[1]));
   ((win)->common.volatile_attr) = ((op)->common.volatile_attr);
   ((win)->common.this_vol_attr) = ((op)->common.this_vol_attr);
 }
    }
  return win;
}






tree
get_narrower (op, unsignedp_ptr)
     register tree op;
     int *unsignedp_ptr;
{
  register int uns = 0;
  int first = 1;
  register tree win = op;

  while (((enum tree_code) (op)->common.code) == NOP_EXPR)
    {
      register int bitschange
 = ((((op)->common.type))->type.sep_unit)
   - ((((((op)->exp.operands[0]))->common.type))->type.sep_unit);


      if (bitschange < 0)
 break;



      op = ((op)->exp.operands[0]);

      if (bitschange > 0)
 {


   if (first)
     uns = ((((op)->common.type))->common.unsigned_attr);



   else if (uns != ((((op)->common.type))->common.unsigned_attr))
     break;
   first = 0;
 }


      win = op;
    }

  if (((enum tree_code) (op)->common.code) == COMPONENT_REF

      && ((enum tree_code) (((op)->common.type))->common.code) != REAL_TYPE)
    {
      int innerprec = (((((((op)->exp.operands[1]))->decl.size))->int_cst.int_cst_low)
         * ((((op)->exp.operands[1]))->decl.size_unit));
      tree type = type_for_size (innerprec, ((op)->common.unsigned_attr));
# 2179 "tree.c"
      if (innerprec < ((((op)->common.type))->type.sep_unit)
   && ((((op)->exp.operands[1]))->decl.mode) != BImode
   && (first || uns == ((((op)->exp.operands[1]))->common.unsigned_attr))
   && type != 0)
 {
   if (first)
     uns = ((((op)->exp.operands[1]))->common.unsigned_attr);
   win = build (COMPONENT_REF, type, ((op)->exp.operands[0]),
         ((op)->exp.operands[1]));
   ((win)->common.volatile_attr) = ((op)->common.volatile_attr);
   ((win)->common.this_vol_attr) = ((op)->common.this_vol_attr);
 }
    }
  *unsignedp_ptr = uns;
  return win;
}






int
type_precision (type)
     register tree type;
{
  return ((((enum tree_code) (type)->common.code) == INTEGER_TYPE
    || ((enum tree_code) (type)->common.code) == ENUMERAL_TYPE
    || ((enum tree_code) (type)->common.code) == REAL_TYPE)
   ? ((type)->type.sep_unit) : 32);
}




int
int_fits_type_p (c, type)
     tree c, type;
{
  if (((type)->common.unsigned_attr))
    return (!((unsigned) ((((type)->type.max))->int_cst.int_cst_high) < (unsigned) ((c)->int_cst.int_cst_high) || ((unsigned) ((((type)->type.max))->int_cst.int_cst_high) == (unsigned) ((c)->int_cst.int_cst_high) && ((unsigned) ((((type)->type.max))->int_cst.int_cst_low) < (unsigned) ((c)->int_cst.int_cst_low))))
     && !((unsigned) ((c)->int_cst.int_cst_high) < (unsigned) ((((type)->type.sep))->int_cst.int_cst_high) || ((unsigned) ((c)->int_cst.int_cst_high) == (unsigned) ((((type)->type.sep))->int_cst.int_cst_high) && ((unsigned) ((c)->int_cst.int_cst_low) < (unsigned) ((((type)->type.sep))->int_cst.int_cst_low)))));
  else
    return (!(((((type)->type.max))->int_cst.int_cst_high) < ((c)->int_cst.int_cst_high) || (((((type)->type.max))->int_cst.int_cst_high) == ((c)->int_cst.int_cst_high) && ((unsigned) ((((type)->type.max))->int_cst.int_cst_low) < (unsigned) ((c)->int_cst.int_cst_low))))
     && !(((c)->int_cst.int_cst_high) < ((((type)->type.sep))->int_cst.int_cst_high) || (((c)->int_cst.int_cst_high) == ((((type)->type.sep))->int_cst.int_cst_high) && ((unsigned) ((c)->int_cst.int_cst_low) < (unsigned) ((((type)->type.sep))->int_cst.int_cst_low)))));
}

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Bug?
  2004-12-12  0:58 Bug? Sam Lauber
@ 2004-12-12  1:49 ` Giovanni Bajo
  2004-12-12  3:24 ` Bug? Aaron W. LaFramboise
  1 sibling, 0 replies; 10+ messages in thread
From: Giovanni Bajo @ 2004-12-12  1:49 UTC (permalink / raw)
  To: Sam Lauber; +Cc: gcc

Sam Lauber <sam124@operamail.com> wrote:

> I was compiling gnulib2 (which was part of gcc 1.42) with GCC 3.4.3. The
> CFLAGS were -g. There was nothing wrong with the code. However,
>
> + gcc -g -O3 tree.c -c
> - tree.c: In function `array_type_nelts':
> - tree.c:1015: internal compiler error: in
> - add_abstract_origin_attribute, at dwarf2out.c:10112
> - Please submit a full bug report,
> - with preprocessed source if appropriate.
> - See <URL:http://gcc.gnu.org/bugs.html> for instructions.
>
> However, when changing -g to -gstabs+, it worked perfectly fine. Does this
> warrant a bug?

Yes, every internal compiler error is a bug. Please submit a bug report in
Bugzilla, following the guidelines specified at
http://gcc.gnu.org/bugs.html.
-- 
Giovanni Bajo

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Bug?
  2004-12-12  0:58 Bug? Sam Lauber
  2004-12-12  1:49 ` Bug? Giovanni Bajo
@ 2004-12-12  3:24 ` Aaron W. LaFramboise
  1 sibling, 0 replies; 10+ messages in thread
From: Aaron W. LaFramboise @ 2004-12-12  3:24 UTC (permalink / raw)
  To: Sam Lauber; +Cc: gcc

Sam Lauber wrote:
> I was compiling gnulib2 (which was part of gcc 1.42) with GCC 3.4.3. The CFLAGS were -g. There was nothing wrong with the code. However,
> 
> + gcc -g -O3 tree.c -c
> - tree.c: In function `array_type_nelts':
> - tree.c:1015: internal compiler error: in 
> - add_abstract_origin_attribute, at dwarf2out.c:10112
> - Please submit a full bug report,
> - with preprocessed source if appropriate.
> - See <URL:http://gcc.gnu.org/bugs.html> for instructions.
> 
> However, when changing -g to -gstabs+, it worked perfectly fine. Does this warrant a bug? The preprocessed source is attached.

This may be related to debug/17406.  Try the patches here:
<http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17406>.

Note that Dwarf-2 debugging does not work properly on 3.4 for Windows
targets, and probably never will on this branch.  It would be helpful to
see if you could recreate it on a recent 4.0 snapshot.

> I compiled with my hand-built GCC 3.4.3 (compiled with make
profiledbootstrap). The code in dwarf2out.c:10112 was

Make sure to include all of the usual info in your bug report, such as
the configure options GCC was built with.  Since it seems like you're
using the --with-dwarf2 option, you should know that it will only give
favorable results if you are using a very recent binutils snapshot.  (I
don't think the ones on mingw.org are new enough.)

Keep in mind that pretty much anything with GCC on Windows outside of
the official MinGW and Cygwin releases is pretty bleeding edge; expect
to do a lot of bleeding.

Aaron W. LaFramboise

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: bug?
  2004-07-11 16:37 bug? Katsuya TANAKA
@ 2004-07-12 11:35 ` Dave Korn
  0 siblings, 0 replies; 10+ messages in thread
From: Dave Korn @ 2004-07-12 11:35 UTC (permalink / raw)
  To: gcc

> -----Original Message-----
> From: gcc-owner On Behalf Of Katsuya TANAKA
> Sent: 11 July 2004 15:58

> > grep ___malloc_top_pad  mallocr.i 
>  unsigned long __malloc_top_pad = (0);

> 	.data

> "__malloc_top_pad"  It goes into a data section.
> 
> But gcc-3.3.4 and gcc-3.4.1 result is 

> Why does it go into a BSS section?

  It's a recent change in behaviour.  From
http://gcc.gnu.org/gcc-3.3/changes.html#3.3.3

"GCC 3.3.1 automatically places zero-initialized variables in the .bss
section on some operating systems. Versions of GNU Emacs up to (and
including) 21.3 will not work correctly when using this optimization; you
can use -fno-zero-initialized-in-bss to disable it. "



    cheers, 
      DaveK
-- 
Can't think of a witty .sigline today....

^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug?
@ 2004-07-11 16:37 Katsuya TANAKA
  2004-07-12 11:35 ` bug? Dave Korn
  0 siblings, 1 reply; 10+ messages in thread
From: Katsuya TANAKA @ 2004-07-11 16:37 UTC (permalink / raw)
  To: gcc



> grep ___malloc_top_pad  mallocr.i 
 unsigned long __malloc_top_pad = (0);

> arm--elf-gcc -O2 -S mallocr.i    (used arm--elf-gcc of gcc-3.2.3)

after compilation here is result. 

	.file	"mallocr.i"
	.global	__malloc_av_
	.data
	.align	2
   :

	.global	__malloc_top_pad
	.align	2
	.type	__malloc_top_pad,object
	.size	__malloc_top_pad,4
__malloc_top_pad:
	.word	0

"__malloc_top_pad"  It goes into a data section.

But gcc-3.3.4 and gcc-3.4.1 result is 

arm--elf-gcc (3.3.4) result.

	.file	"mallocr.i"
	.data
    :
__malloc_trim_threshold:
	.word	131072
	.global	__malloc_top_pad
	.bss
	.global	__malloc_top_pad
	.align	2
	.type	__malloc_top_pad, %object
	.size	__malloc_top_pad, 4
__malloc_top_pad:
	.space	4


arm--elf-gcc (3.4.1) result.

	.file	"mallocr.i"
	.global	__malloc_current_mallinfo
   :
	.global	__malloc_top_pad
	.bss
	.align	2
	.type	__malloc_top_pad, %object
	.size	__malloc_top_pad, 4
__malloc_top_pad:
	.space	4
	.global	__malloc_trim_threshold
	.data
	.align	2

Why does it go into a BSS section?

-------- mallocr.i --------- (newlib-1.10.0/newlib/libc/stdlib/mallocr.c)

# 1 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
# 1 "<built-in>"
# 1 "<\245\263\245\336\245\363\245\311\245\351\245\244\245\363>"
# 1 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
# 264 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
# 1 "/usr/local/cross/lib/gcc-lib/coolbeat--coff/3.3.3/include/stddef.h" 1 3 4
# 151 "/usr/local/cross/lib/gcc-lib/coolbeat--coff/3.3.3/include/stddef.h" 3 4
typedef long int ptrdiff_t;
# 213 "/usr/local/cross/lib/gcc-lib/coolbeat--coff/3.3.3/include/stddef.h" 3 4
typedef long unsigned int size_t;
# 325 "/usr/local/cross/lib/gcc-lib/coolbeat--coff/3.3.3/include/stddef.h" 3 4
typedef int wchar_t;
# 265 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c" 2
# 273 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
# 1 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/stdio.h" 1 3 4
# 32 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/stdio.h" 3 4
# 1 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/_ansi.h" 1 3 4
# 15 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/_ansi.h" 3 4
# 1 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/config.h" 1 3 4
# 117 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/config.h" 3 4
typedef int __int32_t;
typedef unsigned int __uint32_t;
# 16 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/_ansi.h" 2 3 4
# 33 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/stdio.h" 2 3 4




# 1 "/usr/local/cross/lib/gcc-lib/coolbeat--coff/3.3.3/include/stddef.h" 1 3 4
# 38 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/stdio.h" 2 3 4


# 1 "/usr/local/cross/lib/gcc-lib/coolbeat--coff/3.3.3/include/stdarg.h" 1 3 4
# 43 "/usr/local/cross/lib/gcc-lib/coolbeat--coff/3.3.3/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 41 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/stdio.h" 2 3 4







# 1 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/reent.h" 1 3 4
# 14 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/reent.h" 3 4
# 1 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/_types.h" 1 3 4
# 12 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/_types.h" 3 4
typedef long _off_t;
typedef long _ssize_t;
# 15 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/reent.h" 2 3 4




typedef unsigned long __ULong;
# 31 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/reent.h" 3 4
struct _glue
{
  struct _glue *_next;
  int _niobs;
  struct __sFILE *_iobs;
};

struct _Bigint
{
  struct _Bigint *_next;
  int _k, _maxwds, _sign, _wds;
  __ULong _x[1];
};


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







struct _atexit {
        struct _atexit *_next;
        int _ind;
        void (*_fns[32])(void);
};
# 78 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/reent.h" 3 4
struct __sbuf {
        unsigned char *_base;
        int _size;
};






typedef long _fpos_t;
# 116 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/reent.h" 3 4
struct __sFILE {
  unsigned char *_p;
  int _r;
  int _w;
  short _flags;
  short _file;
  struct __sbuf _bf;
  int _lbfsize;


  void * _cookie;

  int (*_read) (void * _cookie, char *_buf, int _n);
  int (*_write) (void * _cookie, const char *_buf, int _n);

  _fpos_t (*_seek) (void * _cookie, _fpos_t _offset, int _whence);
  int (*_close) (void * _cookie);


  struct __sbuf _ub;
  unsigned char *_up;
  int _ur;


  unsigned char _ubuf[3];
  unsigned char _nbuf[1];


  struct __sbuf _lb;


  int _blksize;
  int _offset;

  struct _reent *_data;
};
# 174 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/reent.h" 3 4
struct _rand48 {
  unsigned short _seed[3];
  unsigned short _mult[3];
  unsigned short _add;
};
# 188 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/reent.h" 3 4
struct _reent
{

  int _errno;




  struct __sFILE *_stdin, *_stdout, *_stderr;

  int _inc;
  char _emergency[25];

  int _current_category;
  const char *_current_locale;

  int __sdidinit;

  void (*__cleanup) (struct _reent *);


  struct _Bigint *_result;
  int _result_k;
  struct _Bigint *_p5s;
  struct _Bigint **_freelist;


  int _cvtlen;
  char *_cvtbuf;

  union
    {
      struct
        {
          unsigned int _unused_rand;
          char * _strtok_last;
          char _asctime_buf[26];
          struct __tm _localtime_buf;
          int _gamma_signgam;
          __extension__ unsigned long long _rand_next;
          struct _rand48 _r48;
        } _reent;



      struct
        {

          unsigned char * _nextf[30];
          unsigned int _nmalloc[30];
        } _unused;
    } _new;


  struct _atexit *_atexit;
  struct _atexit _atexit0;


  void (**(_sig_func))(int);




  struct _glue __sglue;
  struct __sFILE __sf[3];
};
# 273 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/reent.h" 3 4
extern struct _reent *_impure_ptr ;

void _reclaim_reent (struct _reent *);
# 49 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/stdio.h" 2 3 4

typedef _fpos_t fpos_t;

typedef struct __sFILE FILE;
# 150 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/stdio.h" 3 4
FILE * tmpfile (void);
char * tmpnam (char *);
int fclose (FILE *);
int fflush (FILE *);
FILE * freopen (const char *, const char *, FILE *);
void setbuf (FILE *, char *);
int setvbuf (FILE *, char *, int, size_t);
int fprintf (FILE *, const char *, ...);
int fscanf (FILE *, const char *, ...);
int printf (const char *, ...);
int scanf (const char *, ...);
int sscanf (const char *, const char *, ...);
int vfprintf (FILE *, const char *, __gnuc_va_list);
int vprintf (const char *, __gnuc_va_list);
int vsprintf (char *, const char *, __gnuc_va_list);
int fgetc (FILE *);
char * fgets (char *, int, FILE *);
int fputc (int, FILE *);
int fputs (const char *, FILE *);
int getc (FILE *);
int getchar (void);
char * gets (char *);
int putc (int, FILE *);
int putchar (int);
int puts (const char *);
int ungetc (int, FILE *);
size_t fread (void *, size_t _size, size_t _n, FILE *);
size_t fwrite (const void * , size_t _size, size_t _n, FILE *);
int fgetpos (FILE *, fpos_t *);
int fseek (FILE *, long, int);
int fsetpos (FILE *, const fpos_t *);
long ftell ( FILE *);
void rewind (FILE *);
void clearerr (FILE *);
int feof (FILE *);
int ferror (FILE *);
void perror (const char *);

FILE * fopen (const char *_name, const char *_type);
int sprintf (char *, const char *, ...);
int remove (const char *);
int rename (const char *, const char *);


int vfiprintf (FILE *, const char *, __gnuc_va_list);
int iprintf (const char *, ...);
int fiprintf (FILE *, const char *, ...);
int siprintf (char *, const char *, ...);
char * tempnam (const char *, const char *);
int vsnprintf (char *, size_t, const char *, __gnuc_va_list);
int vfscanf (FILE *, const char *, __gnuc_va_list);
int vscanf (const char *, __gnuc_va_list);
int vsscanf (const char *, const char *, __gnuc_va_list);

int snprintf (char *, size_t, const char *, ...);
# 214 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/stdio.h" 3 4
FILE * fdopen (int, const char *);

int fileno (FILE *);
int getw (FILE *);
int pclose (FILE *);
FILE * popen (const char *, const char *);
int putw (int, FILE *);
void setbuffer (FILE *, char *, int);
int setlinebuf (FILE *);






FILE * _fdopen_r (struct _reent *, int, const char *);
FILE * _fopen_r (struct _reent *, const char *, const char *);
int _fscanf_r (struct _reent *, FILE *, const char *, ...);
int _getchar_r (struct _reent *);
char * _gets_r (struct _reent *, char *);
int _iprintf_r (struct _reent *, const char *, ...);
int _mkstemp_r (struct _reent *, char *);
char * _mktemp_r (struct _reent *, char *);
void _perror_r (struct _reent *, const char *);
int _printf_r (struct _reent *, const char *, ...);
int _putchar_r (struct _reent *, int);
int _puts_r (struct _reent *, const char *);
int _remove_r (struct _reent *, const char *);
int _rename_r (struct _reent *, const char *_old, const char *_new);

int _scanf_r (struct _reent *, const char *, ...);
int _sprintf_r (struct _reent *, char *, const char *, ...);
int _snprintf_r (struct _reent *, char *, size_t, const char *, ...);
int _sscanf_r (struct _reent *, const char *, const char *, ...);
char * _tempnam_r (struct _reent *, const char *, const char *);
FILE * _tmpfile_r (struct _reent *);
char * _tmpnam_r (struct _reent *, char *);
int _vfprintf_r (struct _reent *, FILE *, const char *, __gnuc_va_list);
int _vprintf_r (struct _reent *, const char *, __gnuc_va_list);
int _vsprintf_r (struct _reent *, char *, const char *, __gnuc_va_list);
int _vsnprintf_r (struct _reent *, char *, size_t, const char *, __gnuc_va_list);
int _vfscanf_r (struct _reent *, FILE *, const char *, __gnuc_va_list);
int _vscanf_r (struct _reent *, const char *, __gnuc_va_list);
int _vsscanf_r (struct _reent *, const char *, const char *, __gnuc_va_list);





int __srget (FILE *);
int __swbuf (int, FILE *);






FILE *funopen (const void * _cookie, int (*readfn)(void * _cookie, char *_buf, int _n), int (*writefn)(void * _cookie, const char *_buf, int _n), fpos_t (*seekfn)(void * _cookie, fpos_t _off, int _whence), int (*closefn)(void * _cookie));
# 274 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c" 2
# 297 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
# 1 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/reent.h" 1 3 4
# 50 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/reent.h" 3 4
# 1 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/machine/types.h" 1 3 4
# 51 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/reent.h" 2 3 4


# 1 "/usr/local/cross/lib/gcc-lib/coolbeat--coff/3.3.3/include/stddef.h" 1 3 4
# 54 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/reent.h" 2 3 4


struct stat;
struct tms;
struct timeval;
struct timezone;



extern int _close_r (struct _reent *, int);
extern int _execve_r (struct _reent *, char *, char **, char **);
extern int _fcntl_r (struct _reent *, int, int, int);
extern int _fork_r (struct _reent *);
extern int _fstat_r (struct _reent *, int, struct stat *);
extern int _getpid_r (struct _reent *);
extern int _kill_r (struct _reent *, int, int);
extern int _link_r (struct _reent *, const char *, const char *);
extern _off_t _lseek_r (struct _reent *, int, _off_t, int);
extern int _open_r (struct _reent *, const char *, int, int);
extern _ssize_t _read_r (struct _reent *, int, void *, size_t);
extern void *_sbrk_r (struct _reent *, size_t);
extern int _stat_r (struct _reent *, const char *, struct stat *);
extern unsigned long _times_r (struct _reent *, struct tms *);
extern int _unlink_r (struct _reent *, const char *);
extern int _wait_r (struct _reent *, int *);
extern _ssize_t _write_r (struct _reent *, int, const void *, size_t);


extern int _gettimeofday_r (struct _reent *, struct timeval *tp, struct timezone *tzp);
# 298 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c" 2
# 321 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
extern void __malloc_lock(struct _reent *);
extern void __malloc_unlock(struct _reent *);
# 501 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
void* memset(void*, int, size_t);
void* memcpy(void*, const void*, size_t);
# 637 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
# 1 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/unistd.h" 1 3 4



# 1 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/unistd.h" 1 3 4
# 9 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/unistd.h" 3 4
# 1 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/types.h" 1 3 4
# 31 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/types.h" 3 4
# 1 "/usr/local/cross/lib/gcc-lib/coolbeat--coff/3.3.3/include/stddef.h" 1 3 4
# 32 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/types.h" 2 3 4
# 54 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/types.h" 3 4
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;



typedef unsigned short ushort;
typedef unsigned int uint;



typedef unsigned long clock_t;




typedef long time_t;




struct timespec {
  time_t tv_sec;
  long tv_nsec;
};

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


typedef long daddr_t;
typedef char * caddr_t;







typedef unsigned short ino_t;
# 128 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/types.h" 3 4
typedef short dev_t;


typedef long off_t;

typedef unsigned short uid_t;
typedef unsigned short gid_t;
typedef int pid_t;
typedef long key_t;
typedef long ssize_t;
# 150 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/types.h" 3 4
typedef unsigned int mode_t __attribute__ ((__mode__ (__SI__)));



typedef unsigned short nlink_t;
# 176 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/types.h" 3 4
typedef long fd_mask;







typedef struct _types_fd_set {
        fd_mask fds_bits[(((64)+(((sizeof (fd_mask) * 8))-1))/((sizeof (fd_mask) * 8)))];
} _types_fd_set;
# 10 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/unistd.h" 2 3 4



# 1 "/usr/local/cross/lib/gcc-lib/coolbeat--coff/3.3.3/include/stddef.h" 1 3 4
# 14 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/unistd.h" 2 3 4

extern char **environ;

void _exit (int __status ) __attribute__ ((noreturn));

int access (const char *__path, int __amode );
unsigned alarm (unsigned __secs );
int chdir (const char *__path );
int chmod (const char *__path, mode_t __mode );
int chown (const char *__path, uid_t __owner, gid_t __group );



int close (int __fildes );
char *ctermid (char *__s );
char *cuserid (char *__s );
int dup (int __fildes );
int dup2 (int __fildes, int __fildes2 );



int execl (const char *__path, const char *, ... );
int execle (const char *__path, const char *, ... );
int execlp (const char *__file, const char *, ... );
int execv (const char *__path, char * const __argv[] );
int execve (const char *__path, char * const __argv[], char * const __envp[] );
int execvp (const char *__file, char * const __argv[] );



int fchmod (int __fildes, mode_t __mode );
int fchown (int __fildes, uid_t __owner, gid_t __group );
pid_t fork (void );
long fpathconf (int __fd, int __name );
int fsync (int __fd);
char *getcwd (char *__buf, size_t __size );
gid_t getegid (void );
uid_t geteuid (void );
gid_t getgid (void );
int getgroups (int __gidsetsize, gid_t __grouplist[] );
char *getlogin (void );



char *getpass (__const char *__prompt);
size_t getpagesize (void);
pid_t getpgid (pid_t);
pid_t getpgrp (void );
pid_t getpid (void );
pid_t getppid (void );
uid_t getuid (void );





int isatty (int __fildes );
int lchown (const char *__path, uid_t __owner, gid_t __group );
int link (const char *__path1, const char *__path2 );
int nice (int __nice_value );
off_t lseek (int __fildes, off_t __offset, int __whence );
long pathconf (const char *__path, int __name );
int pause (void );



int pipe (int __fildes[2] );
int read (int __fd, void *__buf, size_t __nbyte );



int rmdir (const char *__path );






void * sbrk (size_t __incr);





int setgid (gid_t __gid );
int setpgid (pid_t __pid, pid_t __pgid );
int setpgrp (void );
pid_t setsid (void );
int setuid (uid_t __uid );



unsigned sleep (unsigned int __seconds );
void swab (const void *, void *, ssize_t);
long sysconf (int __name );
pid_t tcgetpgrp (int __fildes );
int tcsetpgrp (int __fildes, pid_t __pgrp_id );
char *ttyname (int __fildes );
int unlink (const char *__path );
int vhangup (void );
int write (int __fd, const void *__buf, size_t __nbyte );


pid_t vfork (void );




int _close (int __fildes );
pid_t _fork (void );
pid_t _getpid (void );
int _link (const char *__path1, const char *__path2 );
off_t _lseek (int __fildes, off_t __offset, int __whence );
int _read (int __fd, void *__buf, size_t __nbyte );
void * _sbrk (size_t __incr);
int _unlink (const char *__path );
int _write (int __fd, const void *__buf, size_t __nbyte );
int _execve (const char *__path, char * const __argv[], char * const __envp[] );
# 159 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/unistd.h" 3 4
# 1 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/features.h" 1 3 4
# 160 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/sys/unistd.h" 2 3 4
# 5 "/ftp/proj/coolbeat/newlib-1.10.0/newlib/libc/include/unistd.h" 2 3 4
# 638 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c" 2
# 714 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
struct mallinfo {
  int arena;
  int ordblks;
  int smblks;
  int hblks;
  int hblkhd;
  int usmblks;
  int fsmblks;
  int uordblks;
  int fordblks;
  int keepcost;
};
# 1034 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
void* _malloc_r(struct _reent *reent_ptr, size_t);
void _free_r(struct _reent *reent_ptr, void*);
void* _realloc_r(struct _reent *reent_ptr, void*, size_t);
void* _memalign_r(struct _reent *reent_ptr, size_t, size_t);
void* _valloc_r(struct _reent *reent_ptr, size_t);
void* _pvalloc_r(struct _reent *reent_ptr, size_t);
void* _calloc_r(struct _reent *reent_ptr, size_t, size_t);
void cfree(void*);
int _malloc_trim_r(struct _reent *reent_ptr, size_t);
size_t _malloc_usable_size_r(struct _reent *reent_ptr, void*);
void _malloc_stats_r(struct _reent *reent_ptr);
int _mallopt_r(struct _reent *reent_ptr, int, int);
struct mallinfo _mallinfo_r(struct _reent *reent_ptr);
# 1243 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
struct malloc_chunk
{
  size_t prev_size;
  size_t size;
  struct malloc_chunk* fd;
  struct malloc_chunk* bk;
};

typedef struct malloc_chunk* mchunkptr;
# 1551 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
typedef struct malloc_chunk* mbinptr;
# 1583 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
 mbinptr __malloc_av_[128 * 2 + 2] = {
 0, 0,
 ((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(2) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(2) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(3) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(3) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(4) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(4) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(5) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(5) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(6) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(6) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__!
malloc_av_[2*(7) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(7) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(8) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(8) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(9) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(9) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(10) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(10) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(11) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(11) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(12) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(12) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(13) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(13) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(14) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(14) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((!
char*)&(__malloc_av_[2*(15) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(15) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(16) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(16) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(17) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(17) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(18) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(18) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(19) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(19) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(20) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(20) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(21) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(21) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(22) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(22) + 2]) - 2*(sizeof(size_t)))), ((mbinpt!
r)((char*)&(__malloc_av_[2*(23) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(23) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(24) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(24) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(25) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(25) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(26) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(26) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(27) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(27) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(28) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(28) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(29) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(29) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(30) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(30) + 2]) - 2*(sizeof(size_t)))), ((mbinpt!
r)((char*)&(__malloc_av_[2*(31) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(31) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(32) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(32) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(33) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(33) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(34) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(34) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(35) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(35) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(36) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(36) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(37) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(37) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(38) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(38) + 2]) - 2*(sizeof(size_t)))), ((mbinpt!
r)((char*)&(__malloc_av_[2*(39) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(39) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(40) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(40) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(41) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(41) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(42) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(42) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(43) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(43) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(44) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(44) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(45) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(45) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(46) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(46) + 2]) - 2*(sizeof(size_t)))), ((mbinpt!
r)((char*)&(__malloc_av_[2*(47) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(47) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(48) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(48) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(49) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(49) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(50) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(50) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(51) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(51) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(52) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(52) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(53) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(53) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(54) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(54) + 2]) - 2*(sizeof(size_t)))), ((mbinpt!
r)((char*)&(__malloc_av_[2*(55) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(55) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(56) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(56) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(57) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(57) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(58) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(58) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(59) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(59) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(60) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(60) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(61) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(61) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(62) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(62) + 2]) - 2*(sizeof(size_t)))), ((mbinpt!
r)((char*)&(__malloc_av_[2*(63) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(63) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(64) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(64) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(65) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(65) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(66) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(66) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(67) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(67) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(68) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(68) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(69) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(69) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(70) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(70) + 2]) - 2*(sizeof(size_t)))), ((mbinpt!
r)((char*)&(__malloc_av_[2*(71) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(71) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(72) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(72) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(73) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(73) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(74) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(74) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(75) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(75) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(76) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(76) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(77) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(77) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(78) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(78) + 2]) - 2*(sizeof(size_t)))), ((mbinpt!
r)((char*)&(__malloc_av_[2*(79) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(79) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(80) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(80) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(81) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(81) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(82) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(82) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(83) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(83) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(84) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(84) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(85) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(85) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(86) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(86) + 2]) - 2*(sizeof(size_t)))), ((mbinpt!
r)((char*)&(__malloc_av_[2*(87) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(87) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(88) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(88) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(89) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(89) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(90) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(90) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(91) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(91) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(92) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(92) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(93) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(93) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(94) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(94) + 2]) - 2*(sizeof(size_t)))), ((mbinpt!
r)((char*)&(__malloc_av_[2*(95) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(95) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(96) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(96) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(97) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(97) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(98) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(98) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(99) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(99) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(100) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(100) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(101) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(101) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(102) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(102) + 2]) - 2*(sizeof(size_t)))), ((!
mbinptr)((char*)&(__malloc_av_[2*(103) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(103) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(104) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(104) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(105) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(105) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(106) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(106) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(107) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(107) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(108) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(108) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(109) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(109) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(110) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(110) + 2]) - 2*(sizeof(size_t!
)))), ((mbinptr)((char*)&(__malloc_av_[2*(111) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(111) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(112) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(112) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(113) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(113) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(114) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(114) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(115) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(115) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(116) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(116) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(117) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(117) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(118) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(118) + 2]) - 2*(sizeof(size_t!
)))), ((mbinptr)((char*)&(__malloc_av_[2*(119) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(119) + 2]) - 2*(sizeof(size_t)))),
 ((mbinptr)((char*)&(__malloc_av_[2*(120) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(120) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(121) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(121) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(122) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(122) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(123) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(123) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(124) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(124) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(125) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(125) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(126) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(126) + 2]) - 2*(sizeof(size_t!
)))), ((mbinptr)((char*)&(__malloc_av_[2*(127) + 2]) - 2*(sizeof(size_t)))), ((mbinptr)((char*)&(__malloc_av_[2*(127) + 2]) - 2*(sizeof(size_t))))
};
# 1690 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
 unsigned long __malloc_trim_threshold = (128L * 1024L);
 unsigned long __malloc_top_pad = (0);






 char* __malloc_sbrk_base = (char*)(-1);


 unsigned long __malloc_max_sbrked_mem = 0;


 unsigned long __malloc_max_total_mem = 0;


 struct mallinfo __malloc_current_mallinfo = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
# 2123 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
static void malloc_extend_top(struct _reent *reent_ptr, size_t nb)



{
  char* brk;
  size_t front_misalign;
  size_t correction;
  char* new_brk;
  size_t top_size;

  mchunkptr old_top = (((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd);
  size_t old_top_size = ((old_top)->size & ~((0x1|0x2)));
  char* old_end = (char*)(((mchunkptr)(((char*)(old_top)) + (old_top_size))));



  size_t sbrk_size = nb + __malloc_top_pad + (sizeof(struct malloc_chunk));
  unsigned long pagesz = (4096);





  if (__malloc_sbrk_base != (char*)(-1))
    sbrk_size = (sbrk_size + (pagesz - 1)) & ~(pagesz - 1);

  brk = (char*)(_sbrk_r(reent_ptr, (sbrk_size)));


  if (brk == (char*)(-1) ||
      (brk < old_end && old_top != ((mchunkptr)(((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))))))
    return;

  (__malloc_current_mallinfo.arena) += sbrk_size;

  if (brk == old_end)
  {
    top_size = sbrk_size + old_top_size;
    (((((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd))->size = (top_size | 0x1));
  }
  else
  {
    if (__malloc_sbrk_base == (char*)(-1))
      __malloc_sbrk_base = brk;
    else
      (__malloc_current_mallinfo.arena) += brk - (char*)old_end;


    front_misalign = (unsigned long)((void*)((char*)(brk) + 2*(sizeof(size_t)))) & (((sizeof(size_t)) < 4 ? 8 : ((sizeof(size_t)) + (sizeof(size_t)))) - 1);
    if (front_misalign > 0)
    {
      correction = (((sizeof(size_t)) < 4 ? 8 : ((sizeof(size_t)) + (sizeof(size_t))))) - front_misalign;
      brk += correction;
    }
    else
      correction = 0;


    correction += pagesz - ((unsigned long)(brk + sbrk_size) & (pagesz - 1));


    new_brk = (char*)(_sbrk_r(reent_ptr, (correction)));
    if (new_brk == (char*)(-1)) return;

    (__malloc_current_mallinfo.arena) += correction;

    (((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd) = (mchunkptr)brk;
    top_size = new_brk - brk + correction;
    (((((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd))->size = (top_size | 0x1));

    if (old_top != ((mchunkptr)(((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t)))))))
    {





      if (old_top_size < (sizeof(struct malloc_chunk)))
      {
        (((((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd))->size = (0x1));
        return;
      }


      old_top_size = (old_top_size - 3*(sizeof(size_t))) & ~(((sizeof(size_t)) < 4 ? 8 : ((sizeof(size_t)) + (sizeof(size_t)))) - 1);
      ((old_top)->size = (((old_top)->size & 0x1) | (old_top_size)));
      ((mchunkptr)(((char*)(old_top)) + (old_top_size)))->size =
        (sizeof(size_t))|0x1;
      ((mchunkptr)(((char*)(old_top)) + (old_top_size + (sizeof(size_t)))))->size =
        (sizeof(size_t))|0x1;

      if (old_top_size >= (sizeof(struct malloc_chunk)))
        _free_r(reent_ptr, ((void*)((char*)(old_top) + 2*(sizeof(size_t)))));
    }
  }

  if ((unsigned long)(__malloc_current_mallinfo.arena) > (unsigned long)__malloc_max_sbrked_mem)
    __malloc_max_sbrked_mem = (__malloc_current_mallinfo.arena);




  if ((unsigned long)((__malloc_current_mallinfo.arena)) > (unsigned long)__malloc_max_total_mem)
    __malloc_max_total_mem = (__malloc_current_mallinfo.arena);



  ((void)0);
}
# 2301 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
void* _malloc_r(struct _reent *reent_ptr, size_t bytes)



{






  mchunkptr victim;
  size_t victim_size;
  int idx;
  mbinptr bin;
  mchunkptr remainder;
  long remainder_size;
  int remainder_index;
  unsigned long block;
  int startidx;
  mchunkptr fwd;
  mchunkptr bck;
  mbinptr q;

  size_t nb = (((long)((bytes) + ((sizeof(size_t)) + (((sizeof(size_t)) < 4 ? 8 : ((sizeof(size_t)) + (sizeof(size_t)))) - 1))) < (long)((sizeof(struct malloc_chunk)) + (((sizeof(size_t)) < 4 ? 8 : ((sizeof(size_t)) + (sizeof(size_t)))) - 1))) ? (((sizeof(struct malloc_chunk)) + (((sizeof(size_t)) < 4 ? 8 : ((sizeof(size_t)) + (sizeof(size_t)))) - 1)) & ~((((sizeof(size_t)) < 4 ? 8 : ((sizeof(size_t)) + (sizeof(size_t)))) - 1))) : (((bytes) + ((sizeof(size_t)) + (((sizeof(size_t)) < 4 ? 8 : ((sizeof(size_t)) + (sizeof(size_t)))) - 1))) & ~((((sizeof(size_t)) < 4 ? 8 : ((sizeof(size_t)) + (sizeof(size_t)))) - 1))));

  __malloc_lock(reent_ptr);



  if ((nb < 512 - 8))
  {
    idx = (((unsigned long)(nb)) >> 3);



    q = ((mbinptr)((char*)&(__malloc_av_[2*(idx) + 2]) - 2*(sizeof(size_t))));
    victim = ((q)->bk);



    if (victim == q)
    {
      q = ((mbinptr)((char*)(q) + 2 * sizeof(mbinptr)));
      victim = ((q)->bk);
    }

    if (victim != q)
    {
      victim_size = ((victim)->size & ~((0x1|0x2)));
      { bck = victim->bk; fwd = victim->fd; fwd->bk = bck; bck->fd = fwd; };
      (((mchunkptr)(((char*)(victim)) + (victim_size)))->size |= 0x1);
      ;
      __malloc_unlock(reent_ptr);
      return ((void*)((char*)(victim) + 2*(sizeof(size_t))));
    }

    idx += 2;

  }
  else
  {
    idx = (((((unsigned long)(nb)) >> 9) == 0) ? (((unsigned long)(nb)) >> 3): ((((unsigned long)(nb)) >> 9) <= 4) ? 56 + (((unsigned long)(nb)) >> 6): ((((unsigned long)(nb)) >> 9) <= 20) ? 91 + (((unsigned long)(nb)) >> 9): ((((unsigned long)(nb)) >> 9) <= 84) ? 110 + (((unsigned long)(nb)) >> 12): ((((unsigned long)(nb)) >> 9) <= 340) ? 119 + (((unsigned long)(nb)) >> 15): ((((unsigned long)(nb)) >> 9) <= 1364) ? 124 + (((unsigned long)(nb)) >> 18): 126);
    bin = ((mbinptr)((char*)&(__malloc_av_[2*(idx) + 2]) - 2*(sizeof(size_t))));

    for (victim = ((bin)->bk); victim != bin; victim = victim->bk)
    {
      victim_size = ((victim)->size & ~((0x1|0x2)));
      remainder_size = ( (long)(victim_size - nb) );

      if (remainder_size >= (long)(sizeof(struct malloc_chunk)))
      {
        --idx;
        break;
      }

      else if (remainder_size >= 0)
      {
        { bck = victim->bk; fwd = victim->fd; fwd->bk = bck; bck->fd = fwd; };
        (((mchunkptr)(((char*)(victim)) + (victim_size)))->size |= 0x1);
        ;
        __malloc_unlock(reent_ptr);
        return ((void*)((char*)(victim) + 2*(sizeof(size_t))));
      }
    }

    ++idx;

  }



  if ( (victim = (((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t)))))->fd) != (((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t))))))
  {
    victim_size = ((victim)->size & ~((0x1|0x2)));
    remainder_size = ( (long)(victim_size - nb) );

    if (remainder_size >= (long)(sizeof(struct malloc_chunk)))
    {
      remainder = ((mchunkptr)(((char*)(victim)) + (nb)));
      ((victim)->size = (nb | 0x1));
      { (((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t)))))->fd = (((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t)))))->bk = remainder; remainder->fd = remainder->bk = (((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t))))); };
      ((remainder)->size = (remainder_size | 0x1));
      (((mchunkptr)((char*)(remainder) + (remainder_size)))->prev_size = (remainder_size));
      ;
      __malloc_unlock(reent_ptr);
      return ((void*)((char*)(victim) + 2*(sizeof(size_t))));
    }

    ((((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t)))))->fd = (((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t)))))->bk = (((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t))))));

    if (remainder_size >= 0)
    {
      (((mchunkptr)(((char*)(victim)) + (victim_size)))->size |= 0x1);
      ;
      __malloc_unlock(reent_ptr);
      return ((void*)((char*)(victim) + 2*(sizeof(size_t))));
    }



    { if (victim_size < 512) { remainder_index = (((unsigned long)(victim_size)) >> 3); ((((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->size) |= ((unsigned long)1 << (remainder_index / 4))); bck = ((mbinptr)((char*)&(__malloc_av_[2*(remainder_index) + 2]) - 2*(sizeof(size_t)))); fwd = bck->fd; victim->bk = bck; victim->fd = fwd; fwd->bk = bck->fd = victim; } else { remainder_index = (((((unsigned long)(victim_size)) >> 9) == 0) ? (((unsigned long)(victim_size)) >> 3): ((((unsigned long)(victim_size)) >> 9) <= 4) ? 56 + (((unsigned long)(victim_size)) >> 6): ((((unsigned long)(victim_size)) >> 9) <= 20) ? 91 + (((unsigned long)(victim_size)) >> 9): ((((unsigned long)(victim_size)) >> 9) <= 84) ? 110 + (((unsigned long)(victim_size)) >> 12): ((((unsigned long)(victim_size)) >> 9) <= 340) ? 119 + (((unsigned long)(victim_size)) >> 15): ((((unsigned long)(victim_size)) >> 9) <= 1364) ? 124 + (((unsigned long)(victim_size)) >> 18): 126); bck = ((mbinptr)((c!
har*)&(__malloc_av_[2*(remainder_index) + 2]) - 2*(sizeof(size_t)))); fwd = bck->fd; if (fwd == bck) ((((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->size) |= ((unsigned long)1 << (remainder_index / 4))); else { while (fwd != bck && victim_size < ((fwd)->size & ~((0x1|0x2)))) fwd = fwd->fd; bck = fwd->bk; } victim->bk = bck; victim->fd = fwd; fwd->bk = bck->fd = victim; } };
  }






  if ( (block = ((unsigned long)1 << (idx / 4))) <= (((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->size))
  {



    if ( (block & (((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->size)) == 0)
    {

      idx = (idx & ~(4 - 1)) + 4;
      block <<= 1;
      while ((block & (((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->size)) == 0)
      {
        idx += 4;
        block <<= 1;
      }
    }


    for (;;)
    {
      startidx = idx;
      q = bin = ((mbinptr)((char*)&(__malloc_av_[2*(idx) + 2]) - 2*(sizeof(size_t))));


      do
      {


        for (victim = ((bin)->bk); victim != bin; victim = victim->bk)
        {
          victim_size = ((victim)->size & ~((0x1|0x2)));
          remainder_size = ( (long)(victim_size - nb) );

          if (remainder_size >= (long)(sizeof(struct malloc_chunk)))
          {
            remainder = ((mchunkptr)(((char*)(victim)) + (nb)));
            ((victim)->size = (nb | 0x1));
            { bck = victim->bk; fwd = victim->fd; fwd->bk = bck; bck->fd = fwd; };
            { (((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t)))))->fd = (((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t)))))->bk = remainder; remainder->fd = remainder->bk = (((mbinptr)((char*)&(__malloc_av_[2*(1) + 2]) - 2*(sizeof(size_t))))); };
            ((remainder)->size = (remainder_size | 0x1));
            (((mchunkptr)((char*)(remainder) + (remainder_size)))->prev_size = (remainder_size));
            ;
            __malloc_unlock(reent_ptr);
            return ((void*)((char*)(victim) + 2*(sizeof(size_t))));
          }

          else if (remainder_size >= 0)
          {
            (((mchunkptr)(((char*)(victim)) + (victim_size)))->size |= 0x1);
            { bck = victim->bk; fwd = victim->fd; fwd->bk = bck; bck->fd = fwd; };
            ;
            __malloc_unlock(reent_ptr);
            return ((void*)((char*)(victim) + 2*(sizeof(size_t))));
          }

        }

       bin = ((mbinptr)((char*)(bin) + 2 * sizeof(mbinptr)));
# 2496 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
      } while ((++idx & (4 - 1)) != 0);



      do
      {
        if ((startidx & (4 - 1)) == 0)
        {
          (((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->size) &= ~block;
          break;
        }
        --startidx;
       q = ((mbinptr)((char*)(q) - 2 * sizeof(mbinptr)));
      } while (((q)->fd) == q);



      if ( (block <<= 1) <= (((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->size) && (block != 0) )
      {
        while ((block & (((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->size)) == 0)
        {
          idx += 4;
          block <<= 1;
        }
      }
      else
        break;
    }
  }





  remainder_size = ( (long)((((((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd))->size & ~((0x1|0x2))) - nb) );
  if ((((((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd))->size & ~((0x1|0x2))) < nb || remainder_size < (long)(sizeof(struct malloc_chunk)))
  {
# 2545 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
    malloc_extend_top(reent_ptr, nb);
    remainder_size = ( (long)((((((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd))->size & ~((0x1|0x2))) - nb) );
    if ((((((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd))->size & ~((0x1|0x2))) < nb || remainder_size < (long)(sizeof(struct malloc_chunk)))
    {
      __malloc_unlock(reent_ptr);
      return 0;
    }
  }

  victim = (((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd);
  ((victim)->size = (nb | 0x1));
  (((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd) = ((mchunkptr)(((char*)(victim)) + (nb)));
  (((((mbinptr)((char*)&(__malloc_av_[2*(0) + 2]) - 2*(sizeof(size_t))))->fd))->size = (remainder_size | 0x1));
  ;
  __malloc_unlock(reent_ptr);
  return ((void*)((char*)(victim) + 2*(sizeof(size_t))));


}
# 3415 "../../../../../newlib-1.10.0/newlib/libc/stdlib/mallocr.c"
extern void __malloc_update_mallinfo(void);




--------
Katsuya TANAKA

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Bug?
  1999-02-28  5:51 Bug? Carlo Wood
       [not found] ` < 199902281348.OAA03093@jolan.ppro >
@ 1999-02-28 22:53 ` Carlo Wood
  1999-02-28 22:53 ` Bug? Paul Derbyshire
  2 siblings, 0 replies; 10+ messages in thread
From: Carlo Wood @ 1999-02-28 22:53 UTC (permalink / raw)
  To: egcs

Hi all.  Here's another bug that is probably useless to you because
you can't reproduce it :(.  Nevertheless:

What could possibly be causing this (I am still using egcs-1.1.1 release,
and binutils-2.9.1.0.15):

g++ -shared -Wl,-soname,libr.so.0 -o libr.so.0.2.5 -fpic  version.o ./buffers/dbstreambuf.o ./crosslink/crosslink.o ./ffstl/ffstl.o ./io/file.o ./io/pipe.o ./io/sock.o ./io/traits.o ./kernel/debugdaemon.o ./kernel/events.o ./kernel/execve.o ./kernel/select.o ./kernel/timing.o ./kernel/signals.o ./kernel/libr_app.o ./llists/cbll.o ./llists/expire.o ./llists/sbll.o ./net/inet_support.o ./support/debugdebugcheckpoint.o ./support/debugmalloc.o ./support/ostream_operators.o ./support/support.o ./support/sys.o ./support/syslog.o ./support/debug.o ./support/demangle.o ./utils/bcd2str.o ./utils/buf2str.o ./utils/char2str.o ./utils/strerrno.o
./support/debugdebugcheckpoint.o: In function `global constructors keyed to int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)':
/usr/local/egcs/include/g++/stl_algobase.h:427: multiple definition of `global constructors keyed to int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)'
./llists/cbll.o:/home/carlo/c++/libr/src/llists/../../include/libr/debug.h:102: first defined here
collect2: ld returned 1 exit status

I think this must be a bug because I didn't change really anything big
when this suddenly started to happen :/.

The above is after a 'make clean' (make depend) (ie, all object files
were recompiled).

Below the full output of nm:

~/c++/libr>nm -C src/support/debugdebugcheckpoint.o
00000058 ? .LBE2
00000077 ? .LBE3
00000000 ? .LM1
00000000 ? .LM10
00000003 ? .LM11
00000004 ? .LM12
00000018 ? .LM13
00000030 ? .LM14
00000043 ? .LM15
00000050 ? .LM16
00000058 ? .LM17
00000070 ? .LM18
00000077 ? .LM19
00000003 ? .LM2
00000003 ? .LM3
00000018 ? .LM4
00000024 ? .LM5
00000028 ? .LM6
00000034 ? .LM7
00000040 ? .LM8
00000058 ? .LM9
0000005c ? .Lscope0
0000007b ? .Lscope1
00000000 ? .Ltext1
00000004 T global constructors keyed to int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
         U _GLOBAL_OFFSET_TABLE_
00000000 b libr::debug::continued_cf
         U libr::debug::continued_cf_st::continued_cf_st(unsigned int)
00000024 r __WORD_BIT
00000000 W int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000000 W bool lexicographical_compare<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000020 r malloc_report

~/c++/libr>nm -C src/llists/cbll.o
00000058 ? .LBE2
00000077 ? .LBE3
00000000 ? .LM1
00000000 ? .LM10
00000003 ? .LM11
00000004 ? .LM12
00000018 ? .LM13
00000030 ? .LM14
00000043 ? .LM15
00000050 ? .LM16
00000058 ? .LM17
00000070 ? .LM18
00000077 ? .LM19
00000003 ? .LM2
00000004 ? .LM23
00000052 ? .LM24
00000004 ? .LM25
00000052 ? .LM26
00000004 ? .LM27
00000054 ? .LM28
00000004 ? .LM29
00000003 ? .LM3
00000042 ? .LM30
00000018 ? .LM4
00000024 ? .LM5
00000028 ? .LM6
00000034 ? .LM7
00000040 ? .LM8
00000058 ? .LM9
0000005c ? .Lscope0
0000007b ? .Lscope1
00000059 ? .Lscope3
00000059 ? .Lscope4
0000005b ? .Lscope5
00000049 ? .Lscope6
00000000 ? .Ltext1
00000004 T global constructors keyed to int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
         U _GLOBAL_OFFSET_TABLE_
00000000 b libr::debug::continued_cf
         U libr::debug::continued_cf_st::continued_cf_st(unsigned int)
000000f8 r __WORD_BIT
         U __rtti_class
         U __rtti_ptr
         U __rtti_user
00000004 W sbll_base_ct type_info function
00000004 W sbll_list_ct type_info function
         U sbll_node_ct type_info function
00000004 W __tfP12sbll_list_ct
00000004 W __tfP12sbll_node_ct
00000008 C sbll_base_ct type_info node
00000010 C sbll_list_ct type_info node
         U sbll_node_ct type_info node
0000000c C __tiP12sbll_list_ct
0000000c C __tiP12sbll_node_ct
000000f2 r ident_llists_defs_h
00000000 W int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000000 W bool lexicographical_compare<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000020 r malloc_report
00000000 d rcs_ident
000000c0 r rcs_ident_llists_cbll_h
00000100 r rcs_ident_llists_crosslink_h

========================
Perhaps interesting to note that both files hardly contain any source code.
I'll even dump them here (didn't do that before -indeed- because of license
issues):

---Start of debugdebugcheckpoint.cc--------------------------------------------
// $Header: /usr/src/CVS/libr/src/support/debugdebugcheckpoint.cc,v 1.3 1999/02/04 01:46:25 carlo Exp $
//
// Author:
//
// 1024/624ACAD5 1997/01/26 Carlo Wood, Run on IRC <carlo@runaway.xs4all.nl>
// Key fingerprint = 32 EC A7 B6 AC DB 65 A6  F6 F6 55 DD 1C DC FF 61
// Get key from pgp-public-keys server or
// finger carlo@runaway.xs4all.nl for public key (dialin, try at 21-22h GMT).
//

#ifdef __GNUG__
#pragma implementation
#endif
#include "libr/sys.h"
#include "libr/h.h"
#include "libr/debug.h"
#include "libr/debugdebugcheckpoint.h"

#ifdef DEBUGDEBUG
RCSTAG_CC("$Id: debugdebugcheckpoint.cc,v 1.3 1999/02/04 01:46:25 carlo Exp $")

extern const void *malloc_block_start(const void *ptr);
void debugdebugcheckpoint(void)
{
  static int counter = 0;
  counter++;
}
#endif // DEBUGDEBUG
-------------------------------------------------------------------------------

Note: debugdebugcheckpoint.h is completely empty (everything is between
      #ifdef DEBUGDEBUG, which isn't defined).
      h.h only contains "using namespace std;"
      sys.h and debug.h both start with a "#pragma interface" and should
      be generating any code therefore.

---Start of cbll.cc------------------------------------------------------------
// $Header: /usr/src/CVS/libr/src/llists/cbll.cc,v 1.2 1998/08/06 00:33:47 carlo Exp $
//
// Author:
//
// 1024/624ACAD5 1997/01/26 Carlo Wood, Run on IRC <carlo@runaway.xs4all.nl>
// Key fingerprint = 32 EC A7 B6 AC DB 65 A6  F6 F6 55 DD 1C DC FF 61
// Get key from pgp-public-keys server or
// finger carlo@runaway.xs4all.nl for public key (dialin, try at 21-22h GMT).
//

#ifdef __GNUG__
#pragma implementation "cbll.h"
#pragma implementation "llists_crosslink.h"
#endif
#include "libr/sys.h"
#include "libr/h.h"
#include "libr/cbll.h"  // Generates code

RCSTAG_CC("$Id: cbll.cc,v 1.2 1998/08/06 00:33:47 carlo Exp $")
-------------------------------------------------------------------------------

"libr/cbll.h" and "llists_crosslink.h" do NOT contain a "#pragma interface"
because that only made the total code grow.  Commenting out the
"#pragma implementation ..." lines aboves doesn't make a difference.

=======================

_Adding_ a "#pragma interface" to "cbll.h" anyway removed the problem though;
but as posted before - that makes the total size of the code grow ;).

-------------------------------------------------------------------------------
---

In the past days I *only* changed debugmalloc.cc and debugmalloc.h.
These seem to have nothing to do with the above :/
Nevertheless, mentioned in the error is debug.h:102:

    const continued_cf_st continued_cf(continued_cf_maskbit);

which has absolutely NOTHING to do with what I am working on.
(I changed the parameter of a function that is called from most
 constructors to pass typeid(this) instead of typeid(this).name()).

I'll add the "#pragma interface" to "cbll.h" as a work around for now.

The output of nm after adding this #pragma interface is indeed a lot
larger:

~/c++/libr>nm -C src/llists/cbll.o
00000020 ? .LBB30
<...very long list of labels deleted...>
0000013c ? .LM99
0000002d ? .Lscope12
00000050 ? .Lscope14
00000038 ? .Lscope15
00000059 ? .Lscope16
00000059 ? .Lscope17
000000c6 ? .Lscope18
00000043 ? .Lscope19
000000df ? .Lscope20
00000146 ? .Lscope21
0000009e ? .Lscope22
000000df ? .Lscope23
0000005b ? .Lscope24
00000049 ? .Lscope25
0000001e ? .Lscope28
00000011 ? .Lscope29
00000059 ? .Lscope31
00000059 ? .Lscope32
0000005c ? .Lscope4
0000007b ? .Lscope5
00000011 ? .Lscope7
00000031 ? .Lscope8
0000003a ? .Lscope9
00000004 ? .Ltext10
00000004 ? .Ltext11
00000004 ? .Ltext12
00000004 ? .Ltext13
00000000 ? .Ltext2
00000000 ? .Ltext4
00000004 ? .Ltext6
00000004 ? .Ltext7
00000004 ? .Ltext8
00000004 ? .Ltext9
000001b4 T cbll_node_ct::~cbll_node_ct(void)
         U sbll_list_ct::~sbll_list_ct(void)
         U sbll_node_ct::~sbll_node_ct(void)
00000004 W crosslink_dct::~crosslink_dct(void)
00000004 W list_tct<sbll_list_ct, crosslink_dct>::~list_tct(void)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::~node_tct(void)
000003c8 T global constructors keyed to cbll_node_ct::cbll_node_ct(void)
         U _GLOBAL_OFFSET_TABLE_
00000000 b libr::debug::continued_cf
         U libr::debug::core_dc
         U libr::debug::finish_dc
         U libr::debug::libr_do
         U libr::debug::llists_dc
00000004 T cbll_node_ct::cbll_node_ct(void)
         U sbll_list_ct::sbll_list_ct(void)
         U sbll_node_ct::sbll_node_ct(void)
00000004 W crosslink_dct::crosslink_dct(sbll_node_ct *, void *)
         U libr::debug::continued_cf_st::continued_cf_st(unsigned int)
00000278 r __WORD_BIT
         U __builtin_new
         U ostream::operator<<(char const *)
         U ostream::operator<<(void const *)
         U libr::debug::channel_set_st::operator|(libr::debug::continued_cf_st)
         U libr::debug::debug_ct::operator|(libr::debug::channel_ct const &)
         U libr::debug::debug_ct::operator|(libr::debug::fatal_channel_ct const &)
         U libr::debug::debug_ct::operator|(libr::debug::continued_channel_ct const &)
         U __pure_virtual
         U __rtti_class
         U __rtti_ptr
         U __rtti_si
         U __rtti_user
00000004 W list_tct<sbll_list_ct, crosslink_dct>::list_tct(void)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::node_tct(void)
000003f8 T cbll_node_ct type_info function
00000004 W sbll_base_ct type_info function
00000004 W sbll_list_ct type_info function
         U sbll_node_ct type_info function
00000004 W crosslink_dct type_info function
00000004 W __tfP12sbll_list_ct
00000004 W __tfP12sbll_node_ct
00000004 W node_tct<sbll_node_ct, crosslink_dct> type_info function
0000000c C cbll_node_ct type_info node
00000008 C sbll_base_ct type_info node
00000010 C sbll_list_ct type_info node
         U sbll_node_ct type_info node
0000000c C crosslink_dct type_info node
0000000c C __tiP12sbll_list_ct
0000000c C __tiP12sbll_node_ct
0000000c C node_tct<sbll_node_ct, crosslink_dct> type_info node
00000040 D cbll_node_ct virtual table
00000000 W crosslink_dct virtual table
00000000 W node_tct<sbll_node_ct, crosslink_dct> virtual table
         U sbll_list_ct::add(sbll_node_ct *, sbll_node_ct *)
00000004 W list_tct<sbll_list_ct, crosslink_dct>::add(crosslink_dct *)
00000048 T cbll_node_ct::add_crosslink(sbll_node_ct *, void *)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::deceased(sbll_node_ct *, void *)
         U sbll_node_ct::del(void)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::del(void)
000000a0 T cbll_node_ct::del_crosslink(sbll_node_ct *)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::delinked(void)
00000000 W crosslink_dct::done(void)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::done(void)
         U libr::debug::debug_ct::fatal_finish(void)
         U sbll_list_ct::find(void const *) const
00000004 W list_tct<sbll_list_ct, crosslink_dct>::find(void const *)
00000000 W crosslink_dct::find_cmp(void const *) const
00000004 W node_tct<sbll_node_ct, crosslink_dct>::find_cmp(void const *) const
         U libr::debug::debug_ct::finish(void)
00000272 r ident_llists_defs_h
00000000 W crosslink_dct::insert_cmp(crosslink_dct const &) const
00000004 W node_tct<sbll_node_ct, crosslink_dct>::insert_cmp(crosslink_dct const &) const
00000004 W node_tct<sbll_node_ct, crosslink_dct>::internal_insert_cmp(sbll_base_ct const &) const
00000000 W int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000000 W bool lexicographical_compare<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000020 r malloc_report
00000000 d rcs_ident
00000240 R rcs_ident_llists_cbll_h
00000280 r rcs_ident_llists_crosslink_h
         U libr::debug::debug_ct::start(void)
00000000 W list_tct<sbll_list_ct, crosslink_dct>::start_node(void)

The reason that this helped is probably the fact that

00000004 T global constructors keyed to int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)

disappeared from cbll.o.

-- 
 Carlo Wood  <carlo@runaway.xs4all.nl>

PS I post this to egcs@, not to egcs-bugs@, because I am too well aware that
   this report is useless.  If it is appreciated if I do not post such bugs
   (which probably can't be fixed anyway with the given info), then drop me
   a note and I won't do it anymore in the future :).

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Bug?
  1999-02-28  5:51 Bug? Carlo Wood
       [not found] ` < 199902281348.OAA03093@jolan.ppro >
  1999-02-28 22:53 ` Bug? Carlo Wood
@ 1999-02-28 22:53 ` Paul Derbyshire
  2 siblings, 0 replies; 10+ messages in thread
From: Paul Derbyshire @ 1999-02-28 22:53 UTC (permalink / raw)
  To: egcs

At 02:48 PM 2/28/99 +0100, you wrote:
>Hi all.  Here's another bug that is probably useless to you because
>you can't reproduce it :(.  Nevertheless:
>
>What could possibly be causing this (I am still using egcs-1.1.1 release,
>and binutils-2.9.1.0.15):
>
>g++ -shared -Wl,-soname,libr.so.0 -o libr.so.0.2.5 -fpic  version.o
>./buffers/dbstreambuf.o ./crosslink/crosslink.o ./ffstl/ffstl.o
>./io/file.o ./io/pipe.o ./io/sock.o ./io/traits.o
>./kernel/debugdaemon.o ./kernel/events.o ./kernel/execve.o
>./kernel/select.o ./kernel/timing.o ./kernel/signals.o
>./kernel/libr_app.o ./llists/cbll.o ./llists/expire.o >./llists/sbll.o
./net/inet_support.o
>./support/debugdebugcheckpoint.o ./support/debugmalloc.o
>./support/ostream_operators.o ./support/support.o ./support/sys.o
>./support/syslog.o ./support/debug.o ./support/demangle.o
>./utils/bcd2str.o ./utils/buf2str.o ./utils/char2str.o
>./utils/strerrno.o
>../support/debugdebugcheckpoint.o: In function `global constructors

Hmm. Looks like someone's explanation for the double dot goofiness
was a tad simplistic. Twelve lines with dots at the start, and one gets a
duplication and the others don't. If my ISP were stripping duplicates,
would this mean I'd have had eleven *missing* dots instead of one extra?

>keyed to int lexicographical_compare_3way<signed char const *,
>signed char const *>(signed char const *, signed char const *,
>signed char const *, signed char const *)':
>/usr/local/egcs/include/g++/stl_algobase.h:427: multiple definition
>of `global constructors keyed to int
>lexicographical_compare_3way<signed char const *, signed char const
>*>(signed char const *, signed char const *, signed char const *,
>signed char const *)'
>../llists/cbll.o:/home/carlo/c++/libr/src/llists/../../include/libr/

Well, we're now 2 for 13...

>debug.h:102: first defined here
>collect2: ld returned 1 exit status

>I think this must be a bug because I didn't change really anything big
>when this suddenly started to happen :/.

Not to mention, it's a bug to get duplicate symbols for "hidden" stuff like
init code and virtual tables, period.

[snip]

>00000004 T global constructors keyed to int
lexicographical_compare_3way<signed char const *, signed char const
*>(signed char const *, signed char const *, signed char const *, signed
char const *)

[snip]

>00000004 T global constructors keyed to int
lexicographical_compare_3way<signed char const *, signed char const
*>(signed char const *, signed char const *, signed char const *, signed
char const *)

Yup, it's in there twice, and so were a bunch of other things. A lot of
things were only in there once though.

>#ifdef __GNUG__
>#pragma implementation
>#endif

[Several #includes snipped]

That damn pragma again. I think it was causing someone else trouble a while
back. Try commenting it out. Also, you don't by chance have two inclusions
of the header with lexicographical_compare_threeway in two translation
units both with the "#pragma implementation"? That might confuse the
compiler enough to cause these duplicate symbol errors even for "hidden"
C++ symbols.

Also, you put "#pragma implementation" in a *header*, which may have been
included in more than one source file. (Was it?)

Pragmas are eeevil.

[#ifdef DEBUGDEBUG and everything after snipped]

>Note: debugdebugcheckpoint.h is completely empty (everything is between
>      #ifdef DEBUGDEBUG, which isn't defined).

Except for the damn pragma and the stuff #included after it.

>      sys.h and debug.h both start with a "#pragma interface" and should
>      be generating any code therefore...

...except that the compiler sees

#pragma implementation
...
#pragma interface
...
[templates]

and , I suspect, implements them. That generates code.

I am beginning to suspect that those particular pragmas are especially bad
for your health and sanity. Maybe there ought to be a surgeon general's
warning or something.

>"libr/cbll.h" and "llists_crosslink.h" do NOT contain a "#pragma interface"
>because that only made the total code grow.  Commenting out the
>"#pragma implementation ..." lines aboves doesn't make a difference.

Really? All of them, including in debugdebugcheckpoint.h?

Then it is definitely a bug and not a pragma problem (still a bug IMO since
pragmas are eeevil).

>_Adding_ a "#pragma interface" to "cbll.h" anyway removed the problem though;
>but as posted before - that makes the total size of the code grow ;).

I don't see how that can be. Either
* cbll.h is duplicated except with the "#pragma interface", in which
  case the code emitted should *shrink* with the pragma, or
* cbll.h is not duplicated, in which case the code emitted should not
  change AND there should be no duplicate symbol errors.

This means there's a bug that causes completely bogus, non-sensical
behavior revolving around the pragmas. Try commenting out all of the
pragmas everywhere in all of the sources and headers, and using the repo
thing instead. If the code size shrinks and the problem goes away, the
culprit is that bunch of eeevil pragmas.

>I'll add the "#pragma interface" to "cbll.h" as a work around for now.

I still think that removing all kinds of pragmas might do more good in the
long run than adding more pragmas whose observed behavior is, at the
minimum, difficult to understand.

[Bigger pragma-generated symbol table snipped]

>The reason that this helped is probably the fact that
>
>00000004 T global constructors keyed to int
lexicographical_compare_3way<signed char const *, signed char const
*>(signed char const *, signed char const *, signed char const *, signed
char const *)
>
>disappeared from cbll.o.

Damned freaky, since my (probably not-quite-complete) understanding of
"#pragma interface" is that it should be a no-op with "#pragma
implementation" and should reduce code size without it. So either the same
symbols should pop up, or a proper subset. I think there must be a weird,
poorly-or-un-documented interaction when a preprocessed sourcefile has
multiple pragmas of both kinds mixed around template code. I don't think it
was ever intended for a preprocessed sourcefile to have more than just one
of these pragmas or one of each, or at least more than just one occurrence
of "#pragma implementation".


-- 
   .*.  "Clouds are not spheres, mountains are not cones, coastlines are not
-()  <  circles, and bark is not smooth, nor does lightning travel in a
   `*'  straight line."    -------------------------------------------------
        -- B. Mandelbrot  | http://surf.to/pgd.net
_____________________ ____|________     Paul Derbyshire     pderbysh@usa.net
Programmer & Humanist|ICQ: 10423848|

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Bug?
  1999-02-28 10:32   ` Bug? Martin v. Loewis
@ 1999-02-28 22:53     ` Martin v. Loewis
  0 siblings, 0 replies; 10+ messages in thread
From: Martin v. Loewis @ 1999-02-28 22:53 UTC (permalink / raw)
  To: carlo; +Cc: egcs

> Hi all.  Here's another bug that is probably useless to you because
> you can't reproduce it :(.  Nevertheless:

Thanks. This is a known bug. The work-around is to put some global
symbol into the source file. If this still fails, the global symbol
should appear before the include. Eg.

int this_is_debugdebugcheckpoint_cc = 0;

Hope this helps,
Martin

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Bug?
       [not found] ` < 199902281348.OAA03093@jolan.ppro >
@ 1999-02-28 10:32   ` Martin v. Loewis
  1999-02-28 22:53     ` Bug? Martin v. Loewis
  0 siblings, 1 reply; 10+ messages in thread
From: Martin v. Loewis @ 1999-02-28 10:32 UTC (permalink / raw)
  To: carlo; +Cc: egcs

> Hi all.  Here's another bug that is probably useless to you because
> you can't reproduce it :(.  Nevertheless:

Thanks. This is a known bug. The work-around is to put some global
symbol into the source file. If this still fails, the global symbol
should appear before the include. Eg.

int this_is_debugdebugcheckpoint_cc = 0;

Hope this helps,
Martin

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Bug?
@ 1999-02-28  5:51 Carlo Wood
       [not found] ` < 199902281348.OAA03093@jolan.ppro >
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Carlo Wood @ 1999-02-28  5:51 UTC (permalink / raw)
  To: egcs

Hi all.  Here's another bug that is probably useless to you because
you can't reproduce it :(.  Nevertheless:

What could possibly be causing this (I am still using egcs-1.1.1 release,
and binutils-2.9.1.0.15):

g++ -shared -Wl,-soname,libr.so.0 -o libr.so.0.2.5 -fpic  version.o ./buffers/dbstreambuf.o ./crosslink/crosslink.o ./ffstl/ffstl.o ./io/file.o ./io/pipe.o ./io/sock.o ./io/traits.o ./kernel/debugdaemon.o ./kernel/events.o ./kernel/execve.o ./kernel/select.o ./kernel/timing.o ./kernel/signals.o ./kernel/libr_app.o ./llists/cbll.o ./llists/expire.o ./llists/sbll.o ./net/inet_support.o ./support/debugdebugcheckpoint.o ./support/debugmalloc.o ./support/ostream_operators.o ./support/support.o ./support/sys.o ./support/syslog.o ./support/debug.o ./support/demangle.o ./utils/bcd2str.o ./utils/buf2str.o ./utils/char2str.o ./utils/strerrno.o
./support/debugdebugcheckpoint.o: In function `global constructors keyed to int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)':
/usr/local/egcs/include/g++/stl_algobase.h:427: multiple definition of `global constructors keyed to int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)'
./llists/cbll.o:/home/carlo/c++/libr/src/llists/../../include/libr/debug.h:102: first defined here
collect2: ld returned 1 exit status

I think this must be a bug because I didn't change really anything big
when this suddenly started to happen :/.

The above is after a 'make clean' (make depend) (ie, all object files
were recompiled).

Below the full output of nm:

~/c++/libr>nm -C src/support/debugdebugcheckpoint.o
00000058 ? .LBE2
00000077 ? .LBE3
00000000 ? .LM1
00000000 ? .LM10
00000003 ? .LM11
00000004 ? .LM12
00000018 ? .LM13
00000030 ? .LM14
00000043 ? .LM15
00000050 ? .LM16
00000058 ? .LM17
00000070 ? .LM18
00000077 ? .LM19
00000003 ? .LM2
00000003 ? .LM3
00000018 ? .LM4
00000024 ? .LM5
00000028 ? .LM6
00000034 ? .LM7
00000040 ? .LM8
00000058 ? .LM9
0000005c ? .Lscope0
0000007b ? .Lscope1
00000000 ? .Ltext1
00000004 T global constructors keyed to int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
         U _GLOBAL_OFFSET_TABLE_
00000000 b libr::debug::continued_cf
         U libr::debug::continued_cf_st::continued_cf_st(unsigned int)
00000024 r __WORD_BIT
00000000 W int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000000 W bool lexicographical_compare<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000020 r malloc_report

~/c++/libr>nm -C src/llists/cbll.o
00000058 ? .LBE2
00000077 ? .LBE3
00000000 ? .LM1
00000000 ? .LM10
00000003 ? .LM11
00000004 ? .LM12
00000018 ? .LM13
00000030 ? .LM14
00000043 ? .LM15
00000050 ? .LM16
00000058 ? .LM17
00000070 ? .LM18
00000077 ? .LM19
00000003 ? .LM2
00000004 ? .LM23
00000052 ? .LM24
00000004 ? .LM25
00000052 ? .LM26
00000004 ? .LM27
00000054 ? .LM28
00000004 ? .LM29
00000003 ? .LM3
00000042 ? .LM30
00000018 ? .LM4
00000024 ? .LM5
00000028 ? .LM6
00000034 ? .LM7
00000040 ? .LM8
00000058 ? .LM9
0000005c ? .Lscope0
0000007b ? .Lscope1
00000059 ? .Lscope3
00000059 ? .Lscope4
0000005b ? .Lscope5
00000049 ? .Lscope6
00000000 ? .Ltext1
00000004 T global constructors keyed to int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
         U _GLOBAL_OFFSET_TABLE_
00000000 b libr::debug::continued_cf
         U libr::debug::continued_cf_st::continued_cf_st(unsigned int)
000000f8 r __WORD_BIT
         U __rtti_class
         U __rtti_ptr
         U __rtti_user
00000004 W sbll_base_ct type_info function
00000004 W sbll_list_ct type_info function
         U sbll_node_ct type_info function
00000004 W __tfP12sbll_list_ct
00000004 W __tfP12sbll_node_ct
00000008 C sbll_base_ct type_info node
00000010 C sbll_list_ct type_info node
         U sbll_node_ct type_info node
0000000c C __tiP12sbll_list_ct
0000000c C __tiP12sbll_node_ct
000000f2 r ident_llists_defs_h
00000000 W int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000000 W bool lexicographical_compare<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000020 r malloc_report
00000000 d rcs_ident
000000c0 r rcs_ident_llists_cbll_h
00000100 r rcs_ident_llists_crosslink_h

========================
Perhaps interesting to note that both files hardly contain any source code.
I'll even dump them here (didn't do that before -indeed- because of license
issues):

---Start of debugdebugcheckpoint.cc--------------------------------------------
// $Header: /usr/src/CVS/libr/src/support/debugdebugcheckpoint.cc,v 1.3 1999/02/04 01:46:25 carlo Exp $
//
// Author:
//
// 1024/624ACAD5 1997/01/26 Carlo Wood, Run on IRC <carlo@runaway.xs4all.nl>
// Key fingerprint = 32 EC A7 B6 AC DB 65 A6  F6 F6 55 DD 1C DC FF 61
// Get key from pgp-public-keys server or
// finger carlo@runaway.xs4all.nl for public key (dialin, try at 21-22h GMT).
//

#ifdef __GNUG__
#pragma implementation
#endif
#include "libr/sys.h"
#include "libr/h.h"
#include "libr/debug.h"
#include "libr/debugdebugcheckpoint.h"

#ifdef DEBUGDEBUG
RCSTAG_CC("$Id: debugdebugcheckpoint.cc,v 1.3 1999/02/04 01:46:25 carlo Exp $")

extern const void *malloc_block_start(const void *ptr);
void debugdebugcheckpoint(void)
{
  static int counter = 0;
  counter++;
}
#endif // DEBUGDEBUG
-------------------------------------------------------------------------------

Note: debugdebugcheckpoint.h is completely empty (everything is between
      #ifdef DEBUGDEBUG, which isn't defined).
      h.h only contains "using namespace std;"
      sys.h and debug.h both start with a "#pragma interface" and should
      be generating any code therefore.

---Start of cbll.cc------------------------------------------------------------
// $Header: /usr/src/CVS/libr/src/llists/cbll.cc,v 1.2 1998/08/06 00:33:47 carlo Exp $
//
// Author:
//
// 1024/624ACAD5 1997/01/26 Carlo Wood, Run on IRC <carlo@runaway.xs4all.nl>
// Key fingerprint = 32 EC A7 B6 AC DB 65 A6  F6 F6 55 DD 1C DC FF 61
// Get key from pgp-public-keys server or
// finger carlo@runaway.xs4all.nl for public key (dialin, try at 21-22h GMT).
//

#ifdef __GNUG__
#pragma implementation "cbll.h"
#pragma implementation "llists_crosslink.h"
#endif
#include "libr/sys.h"
#include "libr/h.h"
#include "libr/cbll.h"  // Generates code

RCSTAG_CC("$Id: cbll.cc,v 1.2 1998/08/06 00:33:47 carlo Exp $")
-------------------------------------------------------------------------------

"libr/cbll.h" and "llists_crosslink.h" do NOT contain a "#pragma interface"
because that only made the total code grow.  Commenting out the
"#pragma implementation ..." lines aboves doesn't make a difference.

=======================

_Adding_ a "#pragma interface" to "cbll.h" anyway removed the problem though;
but as posted before - that makes the total size of the code grow ;).

-------------------------------------------------------------------------------
---

In the past days I *only* changed debugmalloc.cc and debugmalloc.h.
These seem to have nothing to do with the above :/
Nevertheless, mentioned in the error is debug.h:102:

    const continued_cf_st continued_cf(continued_cf_maskbit);

which has absolutely NOTHING to do with what I am working on.
(I changed the parameter of a function that is called from most
 constructors to pass typeid(this) instead of typeid(this).name()).

I'll add the "#pragma interface" to "cbll.h" as a work around for now.

The output of nm after adding this #pragma interface is indeed a lot
larger:

~/c++/libr>nm -C src/llists/cbll.o
00000020 ? .LBB30
<...very long list of labels deleted...>
0000013c ? .LM99
0000002d ? .Lscope12
00000050 ? .Lscope14
00000038 ? .Lscope15
00000059 ? .Lscope16
00000059 ? .Lscope17
000000c6 ? .Lscope18
00000043 ? .Lscope19
000000df ? .Lscope20
00000146 ? .Lscope21
0000009e ? .Lscope22
000000df ? .Lscope23
0000005b ? .Lscope24
00000049 ? .Lscope25
0000001e ? .Lscope28
00000011 ? .Lscope29
00000059 ? .Lscope31
00000059 ? .Lscope32
0000005c ? .Lscope4
0000007b ? .Lscope5
00000011 ? .Lscope7
00000031 ? .Lscope8
0000003a ? .Lscope9
00000004 ? .Ltext10
00000004 ? .Ltext11
00000004 ? .Ltext12
00000004 ? .Ltext13
00000000 ? .Ltext2
00000000 ? .Ltext4
00000004 ? .Ltext6
00000004 ? .Ltext7
00000004 ? .Ltext8
00000004 ? .Ltext9
000001b4 T cbll_node_ct::~cbll_node_ct(void)
         U sbll_list_ct::~sbll_list_ct(void)
         U sbll_node_ct::~sbll_node_ct(void)
00000004 W crosslink_dct::~crosslink_dct(void)
00000004 W list_tct<sbll_list_ct, crosslink_dct>::~list_tct(void)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::~node_tct(void)
000003c8 T global constructors keyed to cbll_node_ct::cbll_node_ct(void)
         U _GLOBAL_OFFSET_TABLE_
00000000 b libr::debug::continued_cf
         U libr::debug::core_dc
         U libr::debug::finish_dc
         U libr::debug::libr_do
         U libr::debug::llists_dc
00000004 T cbll_node_ct::cbll_node_ct(void)
         U sbll_list_ct::sbll_list_ct(void)
         U sbll_node_ct::sbll_node_ct(void)
00000004 W crosslink_dct::crosslink_dct(sbll_node_ct *, void *)
         U libr::debug::continued_cf_st::continued_cf_st(unsigned int)
00000278 r __WORD_BIT
         U __builtin_new
         U ostream::operator<<(char const *)
         U ostream::operator<<(void const *)
         U libr::debug::channel_set_st::operator|(libr::debug::continued_cf_st)
         U libr::debug::debug_ct::operator|(libr::debug::channel_ct const &)
         U libr::debug::debug_ct::operator|(libr::debug::fatal_channel_ct const &)
         U libr::debug::debug_ct::operator|(libr::debug::continued_channel_ct const &)
         U __pure_virtual
         U __rtti_class
         U __rtti_ptr
         U __rtti_si
         U __rtti_user
00000004 W list_tct<sbll_list_ct, crosslink_dct>::list_tct(void)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::node_tct(void)
000003f8 T cbll_node_ct type_info function
00000004 W sbll_base_ct type_info function
00000004 W sbll_list_ct type_info function
         U sbll_node_ct type_info function
00000004 W crosslink_dct type_info function
00000004 W __tfP12sbll_list_ct
00000004 W __tfP12sbll_node_ct
00000004 W node_tct<sbll_node_ct, crosslink_dct> type_info function
0000000c C cbll_node_ct type_info node
00000008 C sbll_base_ct type_info node
00000010 C sbll_list_ct type_info node
         U sbll_node_ct type_info node
0000000c C crosslink_dct type_info node
0000000c C __tiP12sbll_list_ct
0000000c C __tiP12sbll_node_ct
0000000c C node_tct<sbll_node_ct, crosslink_dct> type_info node
00000040 D cbll_node_ct virtual table
00000000 W crosslink_dct virtual table
00000000 W node_tct<sbll_node_ct, crosslink_dct> virtual table
         U sbll_list_ct::add(sbll_node_ct *, sbll_node_ct *)
00000004 W list_tct<sbll_list_ct, crosslink_dct>::add(crosslink_dct *)
00000048 T cbll_node_ct::add_crosslink(sbll_node_ct *, void *)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::deceased(sbll_node_ct *, void *)
         U sbll_node_ct::del(void)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::del(void)
000000a0 T cbll_node_ct::del_crosslink(sbll_node_ct *)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::delinked(void)
00000000 W crosslink_dct::done(void)
00000004 W node_tct<sbll_node_ct, crosslink_dct>::done(void)
         U libr::debug::debug_ct::fatal_finish(void)
         U sbll_list_ct::find(void const *) const
00000004 W list_tct<sbll_list_ct, crosslink_dct>::find(void const *)
00000000 W crosslink_dct::find_cmp(void const *) const
00000004 W node_tct<sbll_node_ct, crosslink_dct>::find_cmp(void const *) const
         U libr::debug::debug_ct::finish(void)
00000272 r ident_llists_defs_h
00000000 W crosslink_dct::insert_cmp(crosslink_dct const &) const
00000004 W node_tct<sbll_node_ct, crosslink_dct>::insert_cmp(crosslink_dct const &) const
00000004 W node_tct<sbll_node_ct, crosslink_dct>::internal_insert_cmp(sbll_base_ct const &) const
00000000 W int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000000 W bool lexicographical_compare<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)
00000020 r malloc_report
00000000 d rcs_ident
00000240 R rcs_ident_llists_cbll_h
00000280 r rcs_ident_llists_crosslink_h
         U libr::debug::debug_ct::start(void)
00000000 W list_tct<sbll_list_ct, crosslink_dct>::start_node(void)

The reason that this helped is probably the fact that

00000004 T global constructors keyed to int lexicographical_compare_3way<signed char const *, signed char const *>(signed char const *, signed char const *, signed char const *, signed char const *)

disappeared from cbll.o.

-- 
 Carlo Wood  <carlo@runaway.xs4all.nl>

PS I post this to egcs@, not to egcs-bugs@, because I am too well aware that
   this report is useless.  If it is appreciated if I do not post such bugs
   (which probably can't be fixed anyway with the given info), then drop me
   a note and I won't do it anymore in the future :).

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2004-12-12  3:24 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-12-12  0:58 Bug? Sam Lauber
2004-12-12  1:49 ` Bug? Giovanni Bajo
2004-12-12  3:24 ` Bug? Aaron W. LaFramboise
  -- strict thread matches above, loose matches on Subject: below --
2004-07-11 16:37 bug? Katsuya TANAKA
2004-07-12 11:35 ` bug? Dave Korn
1999-02-28  5:51 Bug? Carlo Wood
     [not found] ` < 199902281348.OAA03093@jolan.ppro >
1999-02-28 10:32   ` Bug? Martin v. Loewis
1999-02-28 22:53     ` Bug? Martin v. Loewis
1999-02-28 22:53 ` Bug? Carlo Wood
1999-02-28 22:53 ` Bug? Paul Derbyshire

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).