Internal compiler error in gcc-2.95.2

Christian Heinlein heinlein@informatik.uni-ulm.de
Fri Jun 9 04:16:00 GMT 2000


Command line
============
gcc -v --save-temps -c @1.cxx

Output
======
Reading specs from /home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/specs
gcc version 2.95.2 19991024 (release)
 /home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4) -D__EXCEPTIONS -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) @1.cxx @1.ii
GNU CPP version 2.95.2 19991024 (release) (sparc)
#include "..." search starts here:
#include <...> search starts here:
 /home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/../../../../include/g++-3
 /home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/../../../../sparc-sun-solaris2.6/include
 /home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /usr/local/include
End of omitted list.
 /home/dbis/heinlein/soft/GCC/install/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/cc1plus @1.ii -quiet -dumpbase @1.cc -version -o @1.s
GNU C++ version 2.95.2 19991024 (release) (sparc-sun-solaris2.6) compiled by GNU C version 2.95.2 19991024 (release).
str: In function `void fmt_sr(Str_sr, Str_sr)':
str:45: Internal compiler error.
str:45: Please submit a full bug report.
str:45: See <URL: http://www.gnu.org/software/gcc/faq.html#bugreport > for instructions.

Contents of @1.ii
=================
# 1 "@1.cxx"

# 1 "str"
# 1 "ctrl"














typedef void (*Proc)();

typedef struct BeginEndRec* BeginEnd;

BeginEnd head, tail;

struct BeginEndRec {
    Proc beg, end;
    BeginEnd prev, next;

    BeginEndRec(Proc b, Proc e) : beg(b), end(e), prev(tail), next(0) {   
	if (!tail) head = tail = this;
	else tail = tail->next = this;
    }
};

struct Exit { };
int argc;
char ** argv;

int main(int ac, char ** av) {   
    argc = ac;
    argv = av;

    int n = 0;
    BeginEnd p = head;
    for (; p; p = p->next) {   
	try {    if (p->beg) (p->beg)(); }
	catch(Exit) {    n++; break; }
    }
    for (; p; p = p->prev) {   
	try {    if (p->end) (p->end)(); }
	catch(Exit) {    n++; continue; }
    }

    return n;
}
# 1 "/usr/include/stdlib.h" 1 3 4
 




 
 

 
 
 




#pragma ident	"@(#)stdlib.h	1.40	97/06/30 SMI"	

# 1 "/usr/include/sys/feature_tests.h" 1 3 4
 
 

 
 
 




#pragma ident	"@(#)feature_tests.h	1.13	97/06/26 SMI"


extern "C" {


 











 







































 
















 

















 





















}



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








extern "C" {


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

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


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




typedef unsigned int    size_t;




typedef long	uid_t;












typedef long wchar_t;




 
# 86 "/usr/include/stdlib.h" 3 4


extern unsigned char	__ctype[];



extern double atof(const char *);
extern int atoi(const char *);
extern long int atol(const char *);
extern double strtod(const char *, char **);
extern long int strtol(const char *, char **, int);
extern unsigned long int strtoul(const char *, char **, int);

extern int rand(void);
extern void srand(unsigned int);





extern void *calloc(size_t, size_t);
extern void free(void *);
extern void *malloc(size_t);
extern void *realloc(void *, size_t);

extern void abort(void);
extern int atexit(void (*)(void));
extern void exit(int);
extern void _exithandle(void);
extern char *getenv(const char *);
extern int system(const char *);

extern void *bsearch(const void *, const void *, size_t, size_t,
	int (*)(const void *, const void *));
extern void qsort(void *, size_t, size_t,
	int (*)(const void *, const void *));

extern int abs(int);
extern div_t div(int, int);
extern long int labs(long);
extern ldiv_t ldiv(long, long);

extern int mbtowc(wchar_t *, const char *, size_t);
extern int mblen(const char *, size_t);
extern int wctomb(char *, wchar_t);

extern size_t mbstowcs(wchar_t *, const char *, size_t);
extern size_t wcstombs(char *, const wchar_t *, size_t);




extern double drand48(void);
extern double erand48(unsigned short *);
extern long jrand48(unsigned short *);
extern void lcong48(unsigned short *);
extern long lrand48(void);
extern long mrand48(void);
extern long nrand48(unsigned short *);
extern unsigned short *seed48(unsigned short *);
extern void srand48(long);
extern int putenv(const char *);
extern void setkey(const char *);





extern void swab(const char *, char *, int);




extern int	mkstemp(char *);


extern int	mkstemp64(char *);






extern long a64l(const char *);
extern char *ecvt(double, int, int *, int *);
extern char *fcvt(double, int, int *, int *);
extern char *gcvt(double, int, char *);
extern int getsubopt(char **, char *const *, char **);
extern int  grantpt(int);
extern char *initstate(unsigned, char *, size_t);
extern char *l64a(long);
extern char *mktemp(char *);
extern char *ptsname(int);
extern long random(void);
extern char *realpath(const char *, char *);
extern char *setstate(const char *);
extern void srandom(unsigned);
extern int ttyslot(void);
extern int  unlockpt(int);
extern void *valloc(size_t);




extern int dup2(int, int);
extern char *qecvt(long double, int, int *, int *);
extern char *qfcvt(long double, int, int *, int *);
extern char *qgcvt(long double, int, char *);
extern char *getcwd(char *, size_t);
extern const char *getexecname(void);
extern char *getlogin(void);
extern int getopt(int, char *const *, const char *);
extern char *optarg;
extern int optind, opterr, optopt;
extern char *getpass(const char *);
extern char *getpassphrase(const char *);
extern int getpw(uid_t, char *);
extern int isatty(int);
extern void *memalign(size_t, size_t);
extern char *ttyname(int);


extern long long atoll(const char *);
extern long long llabs(long long);
extern lldiv_t lldiv(long long, long long);
extern char *lltostr(long long, char *);
extern long long strtoll(const char *, char **, int);
extern unsigned long long strtoull(const char *, char **, int);
extern char *ulltostr(unsigned long long, char *);




# 349 "/usr/include/stdlib.h" 3 4



}



# 52 "ctrl" 2

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

 
 
 

 






#pragma ident	"@(#)stdio.h	1.49	97/05/09 SMI"	


# 1 "/usr/include/sys/va_list.h" 1 3 4
 







#pragma ident	"@(#)va_list.h	1.6	96/01/26 SMI"

 










extern "C" {


# 41 "/usr/include/sys/va_list.h" 3 4



typedef void *__va_list;







}



# 18 "/usr/include/stdio.h" 2 3 4


 








extern "C" {








 





typedef	long long	__longlong_t;













typedef long		off_t;




typedef __longlong_t	off64_t;





typedef long		fpos_t;




typedef __longlong_t	fpos64_t;








 










 



















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




















































typedef struct	 
{




	int		_cnt;	 
	unsigned char	*_ptr;	 

	unsigned char	*_base;	 
	unsigned char	_flag;	 
	unsigned char	_file;	 
} FILE;


extern FILE		__iob[20 ];



extern FILE		*_lastbuf;
extern unsigned char	*_bufendtab[];

extern unsigned char	 _sibuf[], _sobuf[];


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




extern int	remove(const char *);
extern int	rename(const char *, const char *);
extern FILE	*tmpfile(void);
extern char	*tmpnam(char *);



extern int	fclose(FILE *);
extern int	fflush(FILE *);
extern FILE	*fopen(const char *, const char *);
extern FILE	*freopen(const char *, const char *, FILE *);
extern void	setbuf(FILE *, char *);


extern void setbuffer(FILE *, char *, size_t);
extern int setlinebuf(FILE *);

extern int	setvbuf(FILE *, char *, int, size_t);
 
extern int	fprintf(FILE *, const char *, ...);
 
extern int	fscanf(FILE *, const char *, ...);
 
extern int	printf(const char *, ...);
 
extern int	scanf(const char *, ...);


 
extern int	snprintf(char *, size_t, const char *, ...);

 
extern int	sprintf(char *, const char *, ...);
 
extern int	sscanf(const char *, const char *, ...);
extern int	vfprintf(FILE *, const char *, __va_list);
extern int	vprintf(const char *, __va_list);


extern int	vsnprintf(char *, size_t, const char *, __va_list);

extern int	vsprintf(char *, const char *, __va_list);
extern int	fgetc(FILE *);
extern char	*fgets(char *, int, FILE *);
extern int	fputc(int, FILE *);
extern int	fputs(const char *, FILE *);
extern int	getc(FILE *);
extern int	getchar(void);
extern char	*gets(char *);
extern int	putc(int, FILE *);
extern int	putchar(int);
extern int	puts(const char *);
extern int	ungetc(int, FILE *);
extern size_t	fread(void *, size_t, size_t, FILE *);
extern size_t	fwrite(const void *, size_t, size_t, FILE *);
extern int	fgetpos(FILE *, fpos_t *);
extern int	fseek(FILE *, long, int);
extern int	fsetpos(FILE *, const fpos_t *);
extern long	ftell(FILE *);
extern void	rewind(FILE *);
extern void	clearerr(FILE *);
extern int	feof(FILE *);
extern int	ferror(FILE *);
extern void	perror(const char *);

extern int	__filbuf(FILE *);
extern int	__flsbuf(int, FILE *);

 





extern FILE	*fdopen(int, const char *);
extern char	*ctermid(char *);
extern int	fileno(FILE *);



 


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


 




extern FILE	*popen(const char *, const char *);
extern char	*cuserid(char *);
extern char	*tempnam(const char *, const char *);
extern int	getopt(int, char *const *, const char *);

extern int	getsubopt(char **, char *const *, char **);

extern char	*optarg;
extern int	optind, opterr, optopt;
extern int	getw(FILE *);
extern int	putw(int, FILE *);
extern int	pclose(FILE *);



 



extern int	fseeko(FILE *, off_t, int);
extern off_t	ftello(FILE *);


 





extern FILE	*fopen64(const char *, const char *);
extern FILE	*freopen64(const char *, const char *, FILE *);
extern FILE	*tmpfile64(void);
extern int	fgetpos64(FILE *, fpos64_t *);
extern int	fsetpos64(FILE *, const fpos64_t *);
extern int	fseeko64(FILE *, off64_t, int);
extern off64_t	ftello64(FILE *);


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



























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





}



# 53 "ctrl" 2


void unexpected() {   
    fprintf((&__iob[2]) , "Unexpected exception!\n");
    abort();
}

void terminate() {   
    fprintf((&__iob[2]) , "Uncaught exception!\n");
    abort();
}











# 1 "str"

# 1 "type"












typedef signed char mini;
typedef unsigned char umini;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
# 33 "type"

typedef char byte, * addr;
typedef char * string;
typedef void * ptr;
# 2 "str"

# 1 "stdlib"




# 3 "str"

# 1 "stdio"









# 4 "str"

# 1 "str"

# 1 "decl"









# 2 "str"

# 3 "str"

# 5 "str"

# 1 "op"


# 6 "str"

# 7 "str"

# 1 "cmp"

# 1 "prep"




# 2 "cmp"

# 3 "cmp"

# 1 "ctrl"








# 4 "cmp"

# 6 "cmp"

struct Cmp_cp {
    int d_cp;
    Cmp_cp(int dd_cp) : d_cp(dd_cp) {    }
};






inline void  cmp_cp( mini  x_cp,  mini  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }  inline void  cmp_cp( umini  x_cp,  umini  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } 
inline void  cmp_cp( short  x_cp,  short  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }  inline void  cmp_cp( ushort  x_cp,  ushort  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } 
inline void  cmp_cp( int  x_cp,  int  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }  inline void  cmp_cp( uint  x_cp,  uint  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } 
inline void  cmp_cp( long  x_cp,  long  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); }  inline void  cmp_cp( ulong  x_cp,  ulong  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } 
inline void  cmp_cp( float  x_cp,  float  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } 
inline void  cmp_cp( double  x_cp,  double  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } 
inline void  cmp_cp( char  x_cp,  char  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } 
inline void  cmp_cp( bool  x_cp,  bool  y_cp) { if (x_cp < y_cp) throw Cmp_cp(-1); if (x_cp > y_cp) throw Cmp_cp(+1); } 

inline void  cmp_cp(ptr x_cp, ptr y_cp) {    cmp_cp(ulong(x_cp), ulong(y_cp)); }
template <class Any_cp>
inline int delta_cp(Any_cp x_cp, Any_cp y_cp) {   
    try {    cmp_cp(x_cp, y_cp); } catch(Cmp_cp c_cp) {    return c_cp.d_cp; }
    return 0;
}




template <class Any_cp> inline bool operator  == (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp)  ==  0; } 
template <class Any_cp> inline bool operator  != (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp)  !=  0; } 
template <class Any_cp> inline bool operator  <= (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp)  <=  0; } 
template <class Any_cp> inline bool operator  >= (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp)  >=  0; } 
template <class Any_cp> inline bool operator  < (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp)  <  0; } 
template <class Any_cp> inline bool operator  > (Any_cp x_cp, Any_cp y_cp) { return delta_cp(x_cp, y_cp)  >  0; } 

# 8 "str"

# 1 "seq"





# 6 "seq"

# 8 "seq"

# 9 "seq"

# 10 "seq"

# 11 "seq"

# 1 "error"

# 2 "error"

# 3 "error"

# 4 "error"

# 5 "error"

void  error_er(string s1_er, string s2_er = 0, string s3_er = 0, string s4_er = 0) {   
    fprintf((&__iob[2]) , "Error: %s", s1_er);
    if (s2_er) fprintf((&__iob[2]) , "%s", s2_er);
    if (s3_er) fprintf((&__iob[2]) , "%s", s3_er);
    if (s4_er) fprintf((&__iob[2]) , "%s", s4_er);
    fprintf((&__iob[2]) , "\n");

    throw Exit() ;
}
# 12 "seq"


# 14 "seq"

# 1 "string"






# 1 "/usr/include/string.h" 1 3 4
 
 

 
 
 

 








#pragma ident	"@(#)string.h	1.19	96/03/12 SMI"	




extern "C" {













extern void *memcpy(void *, const void *, size_t);
extern void *memmove(void *, const void *, size_t);
extern char *strcpy(char *, const char *);
extern char *strncpy(char *, const char *, size_t);

extern char *strcat(char *, const char *);
extern char *strncat(char *, const char *, size_t);

extern int memcmp(const void *, const void *, size_t);
extern int strcmp(const char *, const char *);
extern int strcoll(const char *, const char *);
extern int strncmp(const char *, const char *, size_t);
extern size_t strxfrm(char *, const char *, size_t);

extern void *memchr(const void *, int, size_t);
extern char *strchr(const char *, int);
extern size_t strcspn(const char *, const char *);
extern char *strpbrk(const char *, const char *);
extern char *strrchr(const char *, int);
extern size_t strspn(const char *, const char *);
extern char *strstr(const char *, const char *);
extern char *strtok(char *, const char *);




extern void *memset(void *, int, size_t);
extern char *strerror(int);
extern size_t strlen(const char *);



extern void *memccpy(void *, const void *, int, size_t);




extern char *strsignal(int);
extern int ffs(int);
extern int strcasecmp(const char *, const char *);
extern int strncasecmp(const char *, const char *, size_t);





extern char *strdup(const char *);


# 136 "/usr/include/string.h" 3 4



}



# 7 "string" 2

# 15 "seq"


# 17 "seq"




enum nil_sq { nil_sq };
enum empty_sq { empty_sq };

const int Reverse_sq = 1;	 
const int Compl_sq = 2;	 
const int Flags_sq = 1|2;



template <class Elem_sq>  struct SeqRep__sq {
    int len_sq;		 
    Elem_sq* elems_sq;	 

     
    SeqRep__sq() : len_sq(0), elems_sq(0) {    }
};



template <class Elem_sq>  struct Seq0__sq {
    SeqRep__sq<  Elem_sq  > * ptr_sq;

    Seq0__sq(SeqRep__sq<  Elem_sq  > * p_sq) : ptr_sq(p_sq) {    }
};

struct Cursor0_sq {
    mutable int idx_sq;	 
    mutable int last_sq;	 
    int* ext_sq;		 

    Cursor0_sq(int n_sq) : idx_sq(0), last_sq(n_sq), ext_sq(0) {    }

    virtual bool operator*() const = 0;
    virtual bool operator++() const = 0;
};



template <class Elem_sq>  struct Cursor__sq : Cursor0_sq {
    Elem_sq* var_sq;		 
    Seq0__sq<  Elem_sq  >  seq_sq;	 

    Cursor__sq(Elem_sq* v_sq, Seq0__sq<  Elem_sq  >  s_sq, int n_sq)
     : Cursor0_sq(n_sq), var_sq(v_sq), seq_sq(s_sq) {    }

    Cursor__sq<  Elem_sq  >  operator=(int&);

    virtual bool operator*() const;
    virtual bool operator++() const;
};



template <class Elem_sq>  struct Ref__sq {
    Seq0__sq<  Elem_sq  >  seq_sq;	 
    int from_sq, to_sq;	 
    const Cursor0_sq* cr_sq;	 

    Ref__sq(Seq0__sq<  Elem_sq  >  s_sq, int i_sq) : seq_sq(s_sq), from_sq(i_sq), to_sq(i_sq), cr_sq(0) {    }
    Ref__sq(Seq0__sq<  Elem_sq  >  s_sq, int i_sq, int j_sq) : seq_sq(s_sq), from_sq(i_sq), to_sq(j_sq), cr_sq(0) {    }

    Ref__sq(Seq0__sq<  Elem_sq  >  s_sq, const Cursor0_sq& c_sq) :
     seq_sq(s_sq), from_sq(c_sq.idx_sq), to_sq(c_sq.idx_sq), cr_sq(&c_sq) {    }

    void  operator=(Elem_sq);
    void  operator=(Seq0__sq<  Elem_sq  > );
};



template <class Elem_sq>  struct Seq__sq {
    union {
    SeqRep__sq<  Elem_sq  > * ptr_sq;
    ulong val_sq;
    };

     
    Seq__sq(enum nil_sq = nil_sq) : val_sq(0) {    }

     
    Seq__sq(enum empty_sq) {    ptr_sq = new SeqRep__sq<  Elem_sq  > ; }

     
    Seq__sq(Seq0__sq<  Elem_sq  >  s_sq) : ptr_sq(s_sq.ptr_sq) {    }
    operator Seq0__sq<  Elem_sq  >  () {    return Seq0__sq<  Elem_sq  > (ptr_sq); }

     
    SeqRep__sq<  Elem_sq  > * operator->() {   
        return (SeqRep__sq<  Elem_sq  > *) (val_sq & ~Flags_sq);
    }

     
    operator bool () {   
	return val_sq & ~Reverse_sq;
    }

     
     
     
    Elem_sq operator[](int);

     
     

     
     

     
     

     
    Ref__sq<  Elem_sq  >  operator()(int i_sq) {    return Ref__sq<  Elem_sq  > ((*this) , i_sq); }
    Ref__sq<  Elem_sq  >  operator()(int i_sq, int j_sq) {    return Ref__sq<  Elem_sq  > ((*this) , i_sq, j_sq); }
    Ref__sq<  Elem_sq  >  operator()(const Cursor0_sq& c_sq) {    return Ref__sq<  Elem_sq  > ((*this) , c_sq); }
};

template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  operator++(Seq0__sq<  Elem_sq  >  s_sq, int postfix_sq) {   
    return s_sq;
}



template <class Elem_sq>  inline ulong id_sq(Seq__sq<  Elem_sq  >  s_sq) {    return s_sq.val_sq; }

 
template <class Elem_sq>  inline bool operator&(Seq__sq<  Elem_sq  >  s_sq, int f_sq) {    return s_sq.val_sq & f_sq; }

 
template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  operator^=(Seq__sq<  Elem_sq  >  s_sq, int f_sq) {   
    s_sq.val_sq ^= f_sq;
    return s_sq;
}

template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  operator-(Seq__sq<  Elem_sq  >  s_sq) {   
    return s_sq ^= Reverse_sq;
}

template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  operator~(Seq__sq<  Elem_sq  >  s_sq) {   
    return s_sq ^= Compl_sq;
}

template <class Elem_sq>  inline int operator*(Seq__sq<  Elem_sq  >  s_sq) {   
    if (!s_sq) return 0;
    if (s_sq&Compl_sq) return - s_sq->len_sq - 1;
    else return s_sq->len_sq;
}

template <class Elem_sq>  inline Elem_sq Seq__sq<  Elem_sq  > ::operator[](int i_sq) {   
    Seq__sq<  Elem_sq  >  s_sq = (*this) ;
    if (1 <= i_sq && i_sq <= *s_sq) {   
	return s_sq->elems_sq[s_sq&Reverse_sq ? *s_sq - i_sq : i_sq - 1];
    }
    else {   
	static Elem_sq null_sq;
	return null_sq;
    }
}

template <class Elem_sq>  inline Elem_sq operator/(Seq__sq<  Elem_sq  >  s_sq, int i_sq) {    return s_sq[i_sq]; }

template <class Elem_sq>  inline Elem_sq elem_sq(Seq__sq<  Elem_sq  >  s_sq, int i_sq) {   
    return s_sq.ptr_sq->elems_sq[i_sq-1];
}



template <class Elem_sq>  void  replace_sq(Seq__sq<  Elem_sq  >  s_sq, int i_sq, int n_sq,
  Elem_sq* v_sq = 0, int m_sq = 0, bool rev_sq = false) {   
    if (!s_sq) error_er("Update operation on nil sequence!");

     
    int c_sq = s_sq->len_sq;
    s_sq->len_sq += m_sq - n_sq;

     
    if (m_sq > n_sq) {   
	s_sq->elems_sq = (Elem_sq*) realloc(s_sq->elems_sq, s_sq->len_sq * sizeof(Elem_sq) );
	if (!s_sq->elems_sq) error_er("Realloc failed!");
    }

     
    i_sq--;
    if (s_sq&Reverse_sq) i_sq = c_sq - i_sq - n_sq;
    memmove(s_sq->elems_sq + i_sq + m_sq, s_sq->elems_sq + i_sq + n_sq, (c_sq - i_sq - n_sq) * sizeof(Elem_sq) );

     
    if (m_sq < n_sq) {   
	s_sq->elems_sq = (Elem_sq*) realloc(s_sq->elems_sq, s_sq->len_sq * sizeof(Elem_sq) );
	 
    }

     
    if ((s_sq&Reverse_sq) == rev_sq) {     
	memcpy(s_sq->elems_sq + i_sq, v_sq, m_sq * sizeof(Elem_sq) );
    }
    else {     
	for (int k_sq = 0; k_sq < m_sq; k_sq++) {   
	    s_sq->elems_sq[i_sq + m_sq - k_sq - 1] = v_sq[k_sq];
	}
    }
}

template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  operator+=(Seq__sq<  Elem_sq  >  s_sq, Elem_sq e_sq) {   
    replace_sq(s_sq, *s_sq + 1, 0, &e_sq, 1);
    return s_sq;
}
template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  operator,(Seq__sq<  Elem_sq  >  s_sq, Elem_sq e_sq) {   
    return s_sq += e_sq;
}

template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  operator+=(Seq__sq<  Elem_sq  >  s_sq, Seq__sq<  Elem_sq  >  t_sq) {   
    if (*t_sq) replace_sq(s_sq, *s_sq + 1, 0, t_sq->elems_sq, t_sq->len_sq, t_sq&Reverse_sq);
    return s_sq;
}
template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  operator,(Seq__sq<  Elem_sq  >  s_sq, Seq__sq<  Elem_sq  >  t_sq) {   
    return s_sq += t_sq;
}

inline enum empty_sq seq_sq() {    return empty_sq; }

template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  seq_sq(Elem_sq e1_sq) {   
    return Seq__sq<  Elem_sq  > (empty_sq) += e1_sq;
}
template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  seq_sq(Elem_sq e1_sq, Elem_sq e2_sq) {   
    return Seq__sq<  Elem_sq  > (empty_sq) += e1_sq, e2_sq;
}
template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq) {   
    return Seq__sq<  Elem_sq  > (empty_sq) += e1_sq, e2_sq, e3_sq;
}
template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq) {   
    return Seq__sq<  Elem_sq  > (empty_sq) += e1_sq, e2_sq, e3_sq, e4_sq;
}
template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq) {   
    return Seq__sq<  Elem_sq  > (empty_sq) += e1_sq, e2_sq, e3_sq, e4_sq, e5_sq;
}
template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
 Elem_sq e6_sq) {   
    return Seq__sq<  Elem_sq  > (empty_sq) += e1_sq, e2_sq, e3_sq, e4_sq, e5_sq, e6_sq;
}
template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
 Elem_sq e6_sq, Elem_sq e7_sq) {   
    return Seq__sq<  Elem_sq  > (empty_sq) += e1_sq, e2_sq, e3_sq, e4_sq, e5_sq, e6_sq, e7_sq;
}
template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  seq_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
 Elem_sq e6_sq, Elem_sq e7_sq, Elem_sq e8_sq) {   
    return Seq__sq<  Elem_sq  > (empty_sq) += e1_sq, e2_sq, e3_sq, e4_sq, e5_sq, e6_sq, e7_sq, e8_sq;
}

template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  operator+(Seq__sq<  Elem_sq  >  s_sq, Seq__sq<  Elem_sq  >  t_sq) {   
    return Seq__sq<  Elem_sq  > (empty_sq) += s_sq, t_sq;
}

template <class Elem_sq>  Seq__sq<  Elem_sq  >  operator+(Seq__sq<  Elem_sq  >  s_sq) {   
    return Seq__sq<  Elem_sq  > (empty_sq) += s_sq;
}

template <class Elem_sq>  inline Cursor__sq<  Elem_sq  >  operator<<(Elem_sq* v_sq, Seq__sq<  Elem_sq  >  s_sq) {   
    return Cursor__sq<  Elem_sq  > (v_sq, s_sq, *s_sq);
}

template <class Elem_sq>  inline Cursor__sq<  Elem_sq  >  operator>=(Cursor__sq<  Elem_sq  >  c_sq, int i_sq) {   
    c_sq.idx_sq = i_sq - 1;
    return c_sq;
}
template <class Elem_sq>  inline Cursor__sq<  Elem_sq  >  operator>(Cursor__sq<  Elem_sq  >  c_sq, int i_sq) {   
    c_sq.idx_sq = i_sq;
    return c_sq;
}

template <class Elem_sq>  inline Cursor__sq<  Elem_sq  >  Cursor__sq<  Elem_sq  > ::operator=(int& j_sq) {   
    ext_sq = &j_sq;
    j_sq = idx_sq;
    return (*this) ;
}

template <class Elem_sq>  inline bool Cursor__sq<  Elem_sq  > ::operator*() const {   
    return idx_sq <= last_sq;
}

template <class Elem_sq>  inline bool Cursor__sq<  Elem_sq  > ::operator++() const {   
    *var_sq = seq_sq++ [++idx_sq];
    if (ext_sq) *ext_sq = idx_sq;
    return idx_sq <= last_sq;
}













template <class Elem_sq>  inline int length_sq(Ref__sq<  Elem_sq  > & r_sq) {   
    if (r_sq.from_sq < 1) r_sq.from_sq = 1;
    if (r_sq.to_sq > *r_sq. seq_sq++ ) r_sq.to_sq = *r_sq. seq_sq++ ;
    int n_sq = r_sq.to_sq - r_sq.from_sq + 1;
    return n_sq > 0 ? n_sq : 0;
}

void  inline operator+=(const Cursor0_sq& c_sq, int d_sq) {   
    c_sq.idx_sq += d_sq;
    c_sq.last_sq += d_sq;
}

template <class Elem_sq>  void  operator~(Ref__sq<  Elem_sq  >  r_sq) {   
    if (int n_sq = length_sq(r_sq)) replace_sq(r_sq. seq_sq++ , r_sq.from_sq, n_sq);
    if (r_sq.cr_sq) *r_sq.cr_sq += -1;
}

template <class Elem_sq>  void  Ref__sq<  Elem_sq  > ::operator=(Elem_sq e_sq) {   
    if (int n_sq = length_sq((*this) )) replace_sq((*this) . seq_sq++ , (*this) .from_sq, n_sq, &e_sq, 1);
     
}

template <class Elem_sq>  void  Ref__sq<  Elem_sq  > ::operator=(Seq0__sq<  Elem_sq  >  t__sq) {   
    Seq__sq<  Elem_sq  >  t_sq = t__sq;
    if (int m_sq = *t_sq) {   
	if (int n_sq = length_sq(r_sq)) {   
	    replace_sq((*this) . seq_sq++ , (*this) .from_sq, n_sq, t_sq->elems_sq, m_sq, t_sq&Reverse_sq);
	}
	if ((*this) .cr_sq) * (*this) .cr_sq += m_sq - 1;
    }
    else {   
	~r_sq;
    }
}

template <class Elem_sq>  void  operator<(Elem_sq e_sq, Ref__sq<  Elem_sq  >  r_sq) {   
    if (1 <= r_sq.from_sq && r_sq.from_sq <= *r_sq. seq_sq++  + 1) {   
	replace_sq(r_sq. seq_sq++ , r_sq.from_sq, 0, &e_sq, 1);
    }
    if (r_sq.cr_sq) *r_sq.cr_sq += 1;
}

template <class Elem_sq>  void  operator<(Seq__sq<  Elem_sq  >  t_sq, Ref__sq<  Elem_sq  >  r_sq) {   
    if (int m_sq = *t_sq) {   
	if (1 <= r_sq.from_sq && r_sq.from_sq <= *r_sq. seq_sq++  + 1) {   
	    replace_sq(r_sq. seq_sq++ , r_sq.from_sq, 0, t_sq->elems_sq, m_sq, t_sq&Reverse_sq);
	}
	if (r_sq.cr_sq) *r_sq.cr_sq += m_sq;
    }
}

template <class Elem_sq>  void  operator<(Ref__sq<  Elem_sq  >  r_sq, Elem_sq e_sq) {   
    r_sq.from_sq = r_sq.to_sq + 1;
    e_sq < r_sq;
}

template <class Elem_sq>  void  operator<(Ref__sq<  Elem_sq  >  r_sq, Seq__sq<  Elem_sq  >  t_sq) {   
    r_sq.from_sq = r_sq.to_sq + 1;
    t_sq < r_sq;
}

template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  operator<<=(Seq__sq<  Elem_sq  >  s_sq, int n_sq) {   
    ~s_sq(1, n_sq);
    return s_sq;
}

template <class Elem_sq>  inline Seq__sq<  Elem_sq  >  operator>>=(Seq__sq<  Elem_sq  >  s_sq, int n_sq) {   
    ~(-s_sq)(1, n_sq);
    return s_sq;
}

const bool unique_sq = true;

template <class Elem_sq>  int diff_sq(Elem_sq* x_sq, Elem_sq* y_sq) {    return delta_cp(*x_sq, *y_sq); }
template <class Elem_sq>  int diffrev_sq(Elem_sq* x_sq, Elem_sq* y_sq) {    return delta_cp(*y_sq, *x_sq); }

template <class Elem_sq>  void  sort_sq(Seq__sq<  Elem_sq  >  s_sq, bool uniq_sq = false) {   
    if (!*s_sq) return;

    typedef int (*DiffElemP_sq)(Elem_sq*, Elem_sq*);
    typedef int (*DiffVoidP_sq)(const void*, const void*);

     
     
    DiffElemP_sq d_sq;
    if (s_sq&Reverse_sq) d_sq = diffrev_sq;
    else d_sq = diff_sq;

    qsort(s_sq->elems_sq, s_sq->len_sq, sizeof(Elem_sq), DiffVoidP_sq(d_sq));

    if (uniq_sq) {   
	Elem_sq e_sq, prev_sq;
	int i_sq;
	for (const Cursor0_sq& current_sq = & e_sq << s_sq = i_sq ; ; ) if (!*current_sq) break; else if (++current_sq)  {   
	    if (i_sq > 1 && e_sq == prev_sq) ~s_sq(current_sq);
	    else prev_sq = e_sq;
	}
    }
}

template <class Elem1_sq, class Elem2_sq>
void  sort2_sq(Seq__sq<  Elem1_sq  >  s1_sq, Seq__sq<  Elem2_sq  >  s2_sq) {   
    error_er("sort2() not yet implemented.");
}



template <class Elem_sq>  Seq__sq<  Elem_sq  >  merge_sq(Seq__sq<  Elem_sq  >  s1_sq, Seq__sq<  Elem_sq  >  s2_sq) {   
    int c1_sq = *s1_sq, c2_sq = *s2_sq;
    if (!c1_sq) return s2_sq;
    if (!c2_sq) return s1_sq;

    Seq__sq<  Elem_sq  >  s_sq = seq_sq();
    int i1_sq = 1, i2_sq = 1;
    while (i1_sq <= c1_sq || i2_sq <= c2_sq) {   
	int d_sq = i1_sq <= c1_sq ? i2_sq <= c2_sq ? delta_cp(s1_sq[i1_sq], s2_sq[i2_sq]) : -1 : +1;
	if (d_sq < 0) {   
	    s_sq += s1_sq[i1_sq++];
	}
	else if (d_sq > 0) {   
	    s_sq += s2_sq[i2_sq++];
	}
	else {   
	    s_sq += s1_sq[i1_sq++]; i2_sq++;
	}
    }
    return s_sq;
}

template <class Elem_sq>  Seq__sq<  Elem_sq  >  intersect_sq(Seq__sq<  Elem_sq  >  s1_sq, Seq__sq<  Elem_sq  >  s2_sq) {   
    int c1_sq = *s1_sq, c2_sq = *s2_sq;
    if (!c1_sq || !c2_sq) return nil_sq;

    Seq__sq<  Elem_sq  >  s_sq = seq_sq();
    int i1_sq = 1, i2_sq = 1;
    while (i1_sq <= c1_sq && i2_sq <= c2_sq) {   
	int d_sq = delta_cp(s1_sq[i1_sq], s2_sq[i2_sq]);
	if (d_sq < 0) {   
	    i1_sq++;
	}
	else if (d_sq > 0) {   
	    i2_sq++;
	}
	else {   
	    s_sq += s1_sq[i1_sq++]; i2_sq++;
	}
    }
    if (*s_sq) return s_sq;
    else return nil_sq;
}

template <class Elem_sq>  Seq__sq<  Elem_sq  >  subtract_sq(Seq__sq<  Elem_sq  >  s1_sq, Seq__sq<  Elem_sq  >  s2_sq) {   
    int c1_sq = *s1_sq, c2_sq = *s2_sq;
    if (!c1_sq) return nil_sq;
    if (!c2_sq) return s1_sq;

    Seq__sq<  Elem_sq  >  s_sq = seq_sq();
    int i1_sq = 1, i2_sq = 1;
    while (i1_sq <= c1_sq) {   
	int d_sq = i2_sq <= c2_sq ? delta_cp(s1_sq[i1_sq], s2_sq[i2_sq]) : -1;
	if (d_sq < 0) {   
	    s_sq += s1_sq[i1_sq++];
	}
	else if (d_sq > 0) {   
	    i2_sq++;
	}
	else {   
	    i1_sq++; i2_sq++;
	}
    }
    if (*s_sq) return s_sq;
    else return nil_sq;
}

template <class Elem_sq>  bool disjoint_sq(Seq__sq<  Elem_sq  >  s1_sq, Seq__sq<  Elem_sq  >  s2_sq) {   
    int c1_sq = *s1_sq, c2_sq = *s2_sq;

    int i1_sq = 1, i2_sq = 1;
    while (i1_sq <= c1_sq && i2_sq <= c2_sq) {   
	int d_sq = delta_cp(s1_sq[i1_sq], s2_sq[i2_sq]);
	if (d_sq < 0) i1_sq++;
	else if (d_sq > 0) i2_sq++;
	else return false;
    }
    return true;
}

template <class Elem_sq>  bool subset_sq(Seq__sq<  Elem_sq  >  s1_sq, Seq__sq<  Elem_sq  >  s2_sq) {   
    int c1_sq = *s1_sq, c2_sq = *s2_sq;
    if (c1_sq > c2_sq) return false;

    int i1_sq = 1, i2_sq = 1;
    while (i1_sq <= c1_sq) {   
	int d_sq = i2_sq <= c2_sq ? delta_cp(s1_sq[i1_sq], s2_sq[i2_sq]) : -1;
	if (d_sq < 0) return false;
	else if (d_sq > 0) i2_sq++;
	else {    i1_sq++; i2_sq++; }
    }
    return true;
}

 
 
template <class Elem_sq>  int element_sq(Elem_sq e_sq, Seq__sq<  Elem_sq  >  s_sq, int* p_sq = 0) {   
    int i_sq, j_sq;
    Elem_sq f_sq;
    for (const Cursor0_sq& current_sq = & f_sq << s_sq = i_sq ; ; ) if (!*current_sq) break; else if (++current_sq)  if (!( f_sq < e_sq )) break; else  ;
    for (const Cursor0_sq& current_sq = & f_sq << s_sq >= i_sq = j_sq ; ; ) if (!*current_sq) break; else if (++current_sq)  if (f_sq == e_sq) return j_sq;
    if (p_sq) *p_sq = i_sq;
    return 0;
}

template <class Elem_sq>  Seq__sq<  Elem_sq  >  operator|(Seq__sq<  Elem_sq  >  s_sq, Seq__sq<  Elem_sq  >  t_sq) {   
    if (s_sq&Compl_sq) {   
	if (t_sq&Compl_sq) {     
	    return ~intersect_sq(~s_sq, ~t_sq);
	}
	else {     
	    return ~subtract_sq(~s_sq, t_sq);
	}
    }
    else {   
	if (t_sq&Compl_sq) {     
	    return ~subtract_sq(~t_sq, s_sq);
	}
	else {     
	    return merge_sq(s_sq, t_sq);
	}
    }
}

template <class Elem_sq>  Seq__sq<  Elem_sq  >  operator&(Seq__sq<  Elem_sq  >  s_sq, Seq__sq<  Elem_sq  >  t_sq) {   
    if (s_sq&Compl_sq) {   
	if (t_sq&Compl_sq) {     
	    return ~merge_sq(~s_sq, ~t_sq);
	}
	else {     
	    return subtract_sq(t_sq, ~s_sq);
	}
    }
    else {   
	if (t_sq&Compl_sq) {     
	    return subtract_sq(s_sq, ~t_sq);
	}
	else {     
	    return intersect_sq(s_sq, t_sq);
	}
    }
}

template <class Elem_sq>  Seq__sq<  Elem_sq  >  operator-(Seq__sq<  Elem_sq  >  s_sq, Seq__sq<  Elem_sq  >  t_sq) {   
    if (s_sq&Compl_sq) {   
	if (t_sq&Compl_sq) {     
	    return subtract_sq(~t_sq, ~s_sq);
	}
	else {     
	    return ~merge_sq(~s_sq, ~t_sq);
	}
    }
    else {   
	if (t_sq&Compl_sq) {     
	    return intersect_sq(s_sq, ~t_sq);
	}
	else {     
	    return subtract_sq(s_sq, t_sq);
	}
    }
}

template <class Elem_sq>  bool operator%(Seq__sq<  Elem_sq  >  s_sq, Seq__sq<  Elem_sq  >  t_sq) {   
    if (s_sq&Compl_sq) {   
	if (t_sq&Compl_sq) {     
	    return false;
	}
	else {     
	    return subset_sq(t_sq, ~s_sq);
	}
    }
    else {   
	if (t_sq&Compl_sq) {     
	    return !subset_sq(s_sq, ~t_sq);
	}
	else {     
	    return disjoint_sq(s_sq, t_sq);
	}
    }
}

template <class Elem_sq>  inline bool operator*(Seq__sq<  Elem_sq  >  s_sq, Seq__sq<  Elem_sq  >  t_sq) {   
    return !(s_sq % t_sq);
}

template <class Elem_sq>  bool operator<<(Seq__sq<  Elem_sq  >  s_sq, Seq__sq<  Elem_sq  >  t_sq) {   
    if (s_sq&Compl_sq) {   
	if (t_sq&Compl_sq) {     
	    return subset_sq(~t_sq, ~s_sq);
	}
	else {     
	    return false;
	}
    }
    else {   
	if (t_sq&Compl_sq) {     
	    return disjoint_sq(s_sq, ~t_sq);
	}
	else {     
	    return subset_sq(s_sq, t_sq);
	}
    }
}

template <class Elem_sq>  inline bool operator>>(Seq__sq<  Elem_sq  >  s_sq, Seq__sq<  Elem_sq  >  t_sq) {   
    return t_sq << s_sq;
}

template <class Elem_sq>  int operator<<(Elem_sq e_sq, Seq__sq<  Elem_sq  >  s_sq) {   
    if (s_sq&Compl_sq) return -!element_sq(e_sq, ~s_sq);
    else return element_sq(e_sq, s_sq);
}

template <class Elem_sq>  inline int operator>>(Seq__sq<  Elem_sq  >  s_sq, Elem_sq e_sq) {   
    return e_sq << s_sq;
}

 
 
const int N_sq = 1<<15;
inline int norm_sq(int c_sq) {    return (c_sq + N_sq) % N_sq; }

template <class Elem_sq>  void  cmp_cp(Seq__sq<  Elem_sq  >  s1_sq, Seq__sq<  Elem_sq  >  s2_sq) {   
     
    int c1_sq = *s1_sq, c2_sq = *s2_sq;
    cmp_cp(norm_sq(c1_sq), norm_sq(c2_sq));

     
    if (c1_sq < 0) {    s1_sq = ~s1_sq; s2_sq = ~s2_sq; }
    Elem_sq e1_sq, e2_sq;
    for (const Cursor0_sq &current1_sq = & e1_sq << s1_sq , &current2_sq = &  e2_sq << s2_sq ; ; ) if (!*current1_sq || !*current2_sq) break; else if (++current1_sq & ++current2_sq)  cmp_cp(e1_sq, e2_sq);
}

template <class Elem_sq>  Seq__sq<  Elem_sq  >  operator|=(Seq__sq<  Elem_sq  >  s_sq, Elem_sq e_sq) {   
    int i_sq;
    if (s_sq&Compl_sq) {   
	if (i_sq = element_sq(e_sq, s_sq)) ~s_sq(i_sq);
    }
    else {   
	if (!element_sq(e_sq, s_sq, &i_sq)) e_sq < s_sq(i_sq);
    }
    return s_sq;
}

template <class Elem_sq>  Seq__sq<  Elem_sq  >  operator-=(Seq__sq<  Elem_sq  >  s_sq, Elem_sq e_sq) {   
    int i_sq;
    if (s_sq&Compl_sq) {   
	if (!element_sq(e_sq, s_sq, &i_sq)) e_sq < s_sq(i_sq);
    }
    else {   
	if (i_sq = element_sq(e_sq, s_sq)) ~s_sq(i_sq);
    }
    return s_sq;
}

inline enum empty_sq set_sq() {    return empty_sq; }

template <class Elem_sq>  inline Seq__sq<   Elem_sq   >   set_sq(Elem_sq e1_sq) {   
    return seq_sq(e1_sq);
}
template <class Elem_sq>  inline Seq__sq<   Elem_sq   >   set_sq(Elem_sq e1_sq, Elem_sq e2_sq) {   
    return set_sq(e1_sq) |= e2_sq;
}
template <class Elem_sq>  inline Seq__sq<   Elem_sq   >   set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq) {   
    return set_sq(e1_sq, e2_sq) |= e3_sq;
}
template <class Elem_sq>  inline Seq__sq<   Elem_sq   >   set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq) {   
    return set_sq(e1_sq, e2_sq, e3_sq) |= e4_sq;
}
template <class Elem_sq>  inline Seq__sq<   Elem_sq   >   set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq) {   
    return set_sq(e1_sq, e2_sq, e3_sq, e4_sq) |= e5_sq;
}
template <class Elem_sq>  inline Seq__sq<   Elem_sq   >   set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
 Elem_sq e6_sq) {   
    return set_sq(e1_sq, e2_sq, e3_sq, e4_sq, e5_sq) |= e6_sq;
}
template <class Elem_sq>  inline Seq__sq<   Elem_sq   >   set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
 Elem_sq e6_sq, Elem_sq e7_sq) {   
    return set_sq(e1_sq, e2_sq, e3_sq, e4_sq, e5_sq, e6_sq) |= e7_sq;
}
template <class Elem_sq>  inline Seq__sq<   Elem_sq   >   set_sq(Elem_sq e1_sq, Elem_sq e2_sq, Elem_sq e3_sq, Elem_sq e4_sq, Elem_sq e5_sq,
 Elem_sq e6_sq, Elem_sq e7_sq, Elem_sq e8_sq) {   
    return set_sq(e1_sq, e2_sq, e3_sq, e4_sq, e5_sq, e6_sq, e7_sq) |= e8_sq;
}



template <class Elem_sq>  struct MsetRep__sq {
    Seq__sq<  Elem_sq  >  elems_sq;		 
    Seq__sq<  int  >  cards_sq;		 

     
    MsetRep__sq() : elems_sq(nil_sq), cards_sq(nil_sq) {    }
};



template <class Elem_sq>  struct Mset__sq {
    union {
    MsetRep__sq<  Elem_sq  > * ptr_sq;
    ulong val_sq;
    };

     
    Mset__sq(enum nil_sq = nil_sq) : val_sq(0) {    }

     
    Mset__sq(enum empty_sq) {    ptr_sq = new MsetRep__sq<  Elem_sq  > ; }

     
    MsetRep__sq<  Elem_sq  > * operator->() {    return ptr_sq; }

     
    operator bool () {    return val_sq; }

     
    Seq__sq<  Elem_sq  >  operator~() {   
	if (ptr_sq) return ptr_sq->elems_sq;
	else return nil_sq;
    }

     
    Elem_sq operator[](int i_sq) {    return (~(*this) )[i_sq]; }

     
    Seq__sq<  int  >  operator*() {   
	if (ptr_sq) return ptr_sq->cards_sq;
	else return nil_sq;
    }
};

const int oo_sq = -1;

template <class Elem_sq>  void  cmp_cp(Mset__sq<  Elem_sq  >  m1_sq, Mset__sq<  Elem_sq  >  m2_sq) {   
    cmp_cp(*m1_sq, *m2_sq);
    cmp_cp(~m1_sq, ~m2_sq);
}

template <class Elem_sq>  Mset__sq<  Elem_sq  >  add_sq(Mset__sq<  Elem_sq  >  m_sq, Elem_sq e_sq, int c_sq = 1) {   
     
    if (!m_sq) error_er("Update operation on nil multiset");

     
    if (!m_sq->elems_sq) {   
	m_sq->elems_sq = seq_sq();
	m_sq->cards_sq = seq_sq();
    }

     
     
     
    int i_sq, j_sq;
    if (i_sq = element_sq(e_sq, m_sq->elems_sq, &j_sq)) {   
	if ((m_sq->cards_sq)[i_sq] == oo_sq) ;
	else if (c_sq == oo_sq) (m_sq->cards_sq)(i_sq) = oo_sq;
	else (m_sq->cards_sq)(i_sq) = (m_sq->cards_sq)[i_sq] + c_sq;
    }
    else {   
	e_sq < (m_sq->elems_sq)(j_sq);
	c_sq < (m_sq->cards_sq)(j_sq);
    }

    return m_sq;
}

template <class Elem_sq>  inline Mset__sq<  Elem_sq  >  operator+=(Mset__sq<  Elem_sq  >  m_sq, Elem_sq e_sq) {   
    return add_sq(m_sq, e_sq, 1);
}

template <class Elem_sq>  Mset__sq<  Elem_sq  >  operator-=(Mset__sq<  Elem_sq  >  m_sq, Elem_sq e_sq) {   
     
    if (int i_sq = e_sq << ~m_sq) {   
	 
	 
	 
	int c_sq = (m_sq->cards_sq)[i_sq];
	if (c_sq == oo_sq) ;
	else if (c_sq > 1) (m_sq->cards_sq)(i_sq) = c_sq - 1;
	else {   
	    ~(m_sq->elems_sq)(i_sq);
	    ~(m_sq->cards_sq)(i_sq);
	}
    }

    return m_sq;
}

inline enum empty_sq mset_sq() {    return empty_sq; }

template <class Elem_sq>  Mset__sq<  Elem_sq  >  mset_sq(Elem_sq e1_sq, int c1_sq) {   
    return add_sq(Mset__sq<  Elem_sq  > (empty_sq), e1_sq, c1_sq);
}

template <class Elem_sq>  Mset__sq<  Elem_sq  >  mset_sq(Elem_sq e1_sq, int c1_sq, Elem_sq e2_sq, int c2_sq) {   
    return add_sq(mset_sq(e1_sq, c1_sq), e2_sq, c2_sq);
}

template <class Elem_sq>  Mset__sq<  Elem_sq  >  mset_sq(Elem_sq e1_sq, int c1_sq, Elem_sq e2_sq, int c2_sq, Elem_sq e3_sq, int c3_sq) {   
    return add_sq(mset_sq(e1_sq, c1_sq, e2_sq, c2_sq), e3_sq, c3_sq);
}

template <class Elem_sq>  Mset__sq<  Elem_sq  >  mset_sq(Elem_sq e1_sq, int c1_sq, Elem_sq e2_sq, int c2_sq, Elem_sq e3_sq, int c3_sq,
						    Elem_sq e4_sq, int c4_sq) {   
    return add_sq(mset_sq(e1_sq, c1_sq, e2_sq, c2_sq, e3_sq, c3_sq), e4_sq, c4_sq);
}

template <class Elem_sq>  inline Cursor__sq<  Elem_sq  >  operator<<(Elem_sq* v_sq, Mset__sq<  Elem_sq  >  m_sq) {   
    return Cursor__sq<  Elem_sq  > (v_sq, ~m_sq, *~m_sq);
}

template <class Elem_sq>  Mset__sq<  Elem_sq  >  operator+(Mset__sq<  Elem_sq  >  m_sq) {   
    Mset__sq<  Elem_sq  >  m__sq = mset_sq();
    m__sq->elems_sq = +(~m_sq);
    m__sq->cards_sq = +(*m_sq);
    return m__sq;
}
# 9 "str"

 
struct StreamRep_sr {
    int len_sr;		 
    FILE* file_sr;
};
struct Str_sr : Seq__sq<  char  >  {
     
    Str_sr() : Seq__sq<  char  > () {    }

     
    Str_sr(Seq__sq<  char  >  s_sr) : Seq__sq<  char  > (s_sr) {    }

     
    friend Str_sr operator+=(Str_sr, char*);
    Str_sr(char* p_sr) : Seq__sq<  char  > (seq_sq()) {    (*this)  += p_sr; }

     
    Str_sr(FILE* f_sr) : Seq__sq<  char  > (seq_sq()) {   
	StreamRep_sr* stream_sr = * (StreamRep_sr**) this;
	stream_sr->len_sr = -1;
	stream_sr->file_sr = f_sr;
    }
};
Str_sr operator+=(Str_sr s_sr, char c_sr) {   
    if (*s_sr >= 0) {     
	Seq__sq<  char  > (s_sr) += c_sr;
    }
    else {     
	StreamRep_sr* stream_sr = * (StreamRep_sr**) &s_sr;
	(--(  stream_sr->file_sr )->_cnt < 0 ? __flsbuf(( c_sr ), (  stream_sr->file_sr )) : (int)(*(  stream_sr->file_sr )->_ptr++ = (unsigned char) ( c_sr ))) ;
    }
    return s_sr;
}
void  fmt_sr(Str_sr s_sr, Str_sr t_sr) {   
    char c_sr;
    for (const Cursor0_sq& current_sq = & c_sr << t_sr ; ; ) if (!*current_sq) break; else if (++current_sq)  s_sr += c_sr;
}
template <class Any_sr>
inline Str_sr operator+=(Str_sr s_sr, Any_sr x_sr) {   
    fmt_sr(s_sr, x_sr);
    return s_sr;
}

template <class Any_sr>
inline Str_sr operator,(Str_sr s_sr, Any_sr x_sr) {   
    return s_sr += x_sr;
}

template <class Any_sr>
Str_sr str_sr(Any_sr x_sr) {   
    Str_sr s_sr = "";
    fmt_sr(s_sr, x_sr);
    return s_sr;
}
Str_sr operator+(Str_sr s1_sr, Str_sr s2_sr) {   
    Str_sr s_sr = "";
    return s_sr += s1_sr, s2_sr;
}
void  fmt_sr(Str_sr s_sr, char* p_sr) {   
    while (char c_sr = * p_sr++) s_sr += c_sr;
}
char buf_sr[40];
void  fmt_sr(Str_sr s_sr, long x_sr) {   
    sprintf(buf_sr, "%ld", x_sr);
    s_sr += buf_sr;
}
inline void  fmt_sr(Str_sr s_sr, int x_sr) {    s_sr += long(x_sr); }
inline void  fmt_sr(Str_sr s_sr, short x_sr) {    s_sr += long(x_sr); }

void  fmt_sr(Str_sr s_sr, ulong x_sr) {   
    sprintf(buf_sr, "%lu", x_sr);
    s_sr += buf_sr;
}
inline void  fmt_sr(Str_sr s_sr, uint x_sr) {    s_sr += ulong(x_sr); }
inline void  fmt_sr(Str_sr s_sr, ushort x_sr) {    s_sr += ulong(x_sr); }
void  fmt_sr(Str_sr s_sr, double x_sr) {   
    sprintf(buf_sr, "%g", x_sr);
    s_sr += buf_sr;
}
void  fmt_sr(Str_sr s_sr, bool x_sr) {   
    s_sr += x_sr ? "true" : "false";
}
void  fmt_sr(Str_sr s_sr, ptr x_sr) {   
    sprintf(buf_sr, "%p", x_sr);
    s_sr += buf_sr;
}
void  cmp_cp(Str_sr s1_sr, Str_sr s2_sr) {   
     
     
    char c1_sr, c2_sr;
    for (const Cursor0_sq &current1_sq = & c1_sr << s1_sr , &current2_sq = &  c2_sr << s2_sr ; ; ) if (!*current1_sq || !*current2_sq) break; else if (++current1_sq & ++current2_sq)  cmp_cp(c1_sr, c2_sr);

     
    cmp_cp(*s1_sr, *s2_sr);
}
bool operator==(Str_sr, Str_sr);
bool operator!=(Str_sr, Str_sr);
bool operator<=(Str_sr, Str_sr);
bool operator>=(Str_sr, Str_sr);
bool operator<(Str_sr, Str_sr);
bool operator>(Str_sr, Str_sr);
int operator<<(char c_sr, Str_sr s_sr) {   
    char c__sr;
    int i_sr;
    for (const Cursor0_sq& current_sq = & c__sr << s_sr = i_sr ; ; ) if (!*current_sq) break; else if (++current_sq)  if (c__sr == c_sr) return i_sr;
    return 0;
}
void  dummy_sr() {   
    Seq__sq<  char  >  s_sr;
    char c_sr;
    for (const Cursor0_sq& current_sq = & c_sr << s_sr ; ; ) if (!*current_sq) break; else if (++current_sq)  ;
    -s_sr;
    s_sr <<= 1;

    Str_sr s1_sr, s2_sr;
    s1_sr == s2_sr; s1_sr != s2_sr; s1_sr <= s2_sr; s1_sr >= s2_sr; s1_sr < s2_sr; s1_sr > s2_sr;
}
# 5 "str"


void beg1 (); BeginEndRec begend1 (beg1 , 0); void beg1 ()  {  
    Str_sr s__44589 = "abc";
    Str_sr t__44589 = "x" + s__44589 + "yz";

    Str_sr out__44589 = (&__iob[1]) ;
    out__44589 += "hallo", ' ', 4711, '\n';
    out__44589 += 12.34, ' ', &s__44589, '\n';
    out__44589 += s__44589, ' ', t__44589, ' ', s__44589 > t__44589, ' ', s__44589 == t__44589, '\n';

    ~t__44589(1); ~(-t__44589)(1, 2);
    out__44589 += s__44589, ' ', t__44589, ' ', s__44589 > t__44589, ' ', s__44589 == t__44589, '\n';

    if (argc == 2) {   
	out__44589 += "start\n";
	int n__44589 = atoi(argv[1]);
	s__44589 = ""; t__44589 = "";
	for (int i__44589 = 1; i__44589 <= n__44589; i__44589++) {    s__44589 += 'x'; t__44589 += 'y'; }
	out__44589 += "stop\n";
    }
}


More information about the Gcc-bugs mailing list