1// { dg-do assemble } 2// { dg-options "" } 3// This test case caused the compiler to abort at one point in time. 4// prms-id: 811 5 6class ostream; class streambuf; 7 8typedef long streamoff, streampos; 9 10struct _ios_fields { 11 streambuf *_strbuf; 12 ostream* _tie; 13 int _width; 14 unsigned long _flags; 15 char _fill; 16 unsigned char _state; 17 unsigned short _precision; 18}; 19 20 21enum state_value { _good = 0, _eof = 1, _fail = 2, _bad = 4 }; 22enum open_mode { input=1, output=2, append=8 }; 23 24 25class ios : public _ios_fields { 26 public: 27 enum io_state { goodbit=0, eofbit=1, failbit=2, badbit=4 }; 28 enum open_mode { 29 in=1, 30 out=2, 31 ate=4, 32 app=8, 33 trunc=16, 34 nocreate=32, 35 noreplace=64 }; 36 enum seek_dir { beg, cur, end}; 37 enum { skipws=01, left=02, right=04, internal=010, 38 dec=020, oct=040, hex=0100, 39 showbase=0200, showpoint=0400, uppercase=01000, showpos=02000, 40 scientific=04000, fixed=0100000, unitbuf=020000, stdio=040000, 41 dont_close=0x80000000 42 }; 43 44 ostream* tie() const { return _tie; } 45 ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; } 46 47 48 char fill() const { return _fill; } 49 char fill(char newf) { char oldf = _fill; _fill = newf; return oldf; } 50 unsigned long flags() const { return _flags; } 51 unsigned long flags(unsigned long new_val) { 52 unsigned long old_val = _flags; _flags = new_val; return old_val; } 53 unsigned short precision() const { return _precision; } 54 unsigned short precision(int newp) { 55 unsigned short oldp = _precision; _precision = (unsigned short)newp; 56 return oldp; } 57 unsigned long setf(unsigned long val) { 58 unsigned long oldbits = _flags; 59 _flags |= val; return oldbits; } 60 unsigned long setf(unsigned long val, unsigned long mask) { 61 unsigned long oldbits = _flags; 62 _flags = (_flags & ~mask) | (val & mask); return oldbits; } 63 unsigned long unsetf(unsigned long mask) { 64 unsigned long oldbits = _flags & mask; 65 _flags &= ~mask; return oldbits; } 66 int width() const { return _width; } 67 int width(long val) { long save = _width; _width = val; return save; } 68 69 static const unsigned long basefield; 70 static const unsigned long adjustfield; 71 static const unsigned long floatfield; 72 73 streambuf* rdbuf() const { return _strbuf; } 74 void clear(int state = 0) { _state = state; } 75 int good() const { return _state == 0; } 76 int eof() const { return _state & ios::eofbit; } 77 int fail() const { return _state & (ios::badbit|ios::failbit); } 78 int bad() const { return _state & ios::badbit; } 79 int rdstate() const { return _state; } 80 void set(int flag) { _state |= flag; } 81 operator void*() const { return fail() ? (void*)0 : (void*)this; } 82 int operator!() const { return fail(); } 83 84 85 void unset(state_value flag) { _state &= ~flag; } 86 void close(); 87 int is_open(); 88 int readable(); 89 int writable(); 90 91 92 protected: 93 ios(streambuf*sb) { _strbuf=sb; _state=0; _width=0; _fill=' '; 94 _flags=ios::skipws; _precision=6; } 95}; 96 97 98 99 100typedef ios::seek_dir _seek_dir; 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123//# 168 "/usr/latest/lib/g++-include/streambuf.h" 3 124 125 126struct __streambuf { 127 128 int _flags; 129 char* _gptr; 130 char* _egptr; 131 char* _eback; 132 char* _pbase; 133 char* _pptr; 134 char* _epptr; 135 char* _base; 136 char* _ebuf; 137 struct streambuf *_chain; 138 139 140 141 142}; 143 144struct streambuf : private __streambuf { 145 friend class ios; 146 friend class istream; 147 friend class ostream; 148 protected: 149 static streambuf* _list_all; 150 streambuf*& xchain() { return _chain; } 151 void _un_link(); 152 void _link_in(); 153 char* gptr() const { return _gptr; } 154 char* pptr() const { return _pptr; } 155 char* egptr() const { return _egptr; } 156 char* epptr() const { return _epptr; } 157 char* pbase() const { return _pbase; } 158 char* eback() const { return _eback; } 159 char* ebuf() const { return _ebuf; } 160 char* base() const { return _base; } 161 void xput_char(char c) { *_pptr++ = c; } 162 int xflags() { return _flags; } 163 int xflags(int f) { int fl = _flags; _flags = f; return fl; } 164 void xsetflags(int f) { _flags |= f; } 165 void gbump(int n) { _gptr += n; } 166 void pbump(int n) { _pptr += n; } 167 void setb(char* b, char* eb, int a=0); 168 void setp(char* p, char* ep) { _pbase=_pptr=p; _epptr=ep; } 169 void setg(char* eb, char* g, char *eg) { _eback=eb; _gptr=g; _egptr=eg; } 170 public: 171 static int flush_all(); 172 static void flush_all_linebuffered(); 173 virtual int underflow(); 174 virtual int overflow(int c = (-1) ); 175 virtual int doallocate(); 176 virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); 177 virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out); 178 int sputbackc(char c); 179 int sungetc(); 180 streambuf(); 181 virtual ~streambuf(); 182 int unbuffered() { return _flags & 2 ? 1 : 0; } 183 int linebuffered() { return _flags & 0x4000 ? 1 : 0; } 184 void unbuffered(int i) 185 { if (i) _flags |= 2 ; else _flags &= ~2 ; } 186 void linebuffered(int i) 187 { if (i) _flags |= 0x4000 ; else _flags &= ~0x4000 ; } 188 int allocate() { 189 if (base() || unbuffered()) return 0; 190 else return doallocate(); } 191 virtual int sync(); 192 virtual int pbackfail(int c); 193 virtual int ungetfail(); 194 virtual streambuf* setbuf(char* p, int len); 195 int in_avail() { return _egptr - _gptr; } 196 int out_waiting() { return _pptr - _pbase; } 197 virtual int sputn(const char* s, int n); 198 virtual int sgetn(char* s, int n); 199 long sgetline(char* buf, int n, char delim, int putback_delim); 200 int sbumpc() { 201 if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ; 202 else return *(unsigned char*)_gptr++; } 203 int sgetc() { 204 if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ; 205 else return *(unsigned char*)_gptr; } 206 int snextc() { 207 if (++_gptr >= _egptr && underflow() == (-1) ) return (-1) ; 208 else return *(unsigned char*)_gptr; } 209 int sputc(int c) { 210 if (_pptr >= _epptr) return overflow(c); 211 return *_pptr++ = c, (unsigned char)c; } 212 int vscan(char const *fmt0, char* ap); 213 int vform(char const *fmt0, char* ap); 214 215 216 217 218 219 220}; 221 222struct __file_fields { 223 char _fake; 224 char _shortbuf[1]; 225 short _fileno; 226 int _blksize; 227 char* _save_gptr; 228 char* _save_egptr; 229 long _offset; 230}; 231 232class filebuf : public streambuf { 233 struct __file_fields _fb; 234 void init(); 235 public: 236 filebuf(); 237 filebuf(int fd); 238 filebuf(int fd, char* p, int len); 239 ~filebuf(); 240 filebuf* attach(int fd); 241 filebuf* open(const char *filename, const char *mode); 242 filebuf* open(const char *filename, int mode, int prot = 0664); 243 virtual int underflow(); 244 virtual int overflow(int c = (-1) ); 245 int is_open() { return _fb._fileno >= 0; } 246 int fd() { return is_open() ? _fb._fileno : (-1) ; } 247 filebuf* close(); 248 virtual int doallocate(); 249 virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); 250 int sputn(const char* s, int n); 251 int sgetn(char* s, int n); 252 virtual int sync(); 253 protected: 254 virtual int pbackfail(int c); 255 int is_reading() { return eback() != egptr(); } 256 char* cur_ptr() { return is_reading() ? gptr() : pptr(); } 257 258 char* file_ptr() { return _fb._save_gptr ? _fb._save_egptr : egptr(); } 259 int do_flush(); 260 261 virtual int sys_read(char* buf, int size); 262 virtual long sys_seek(long , _seek_dir); 263 virtual long sys_write(const void*, long); 264 virtual int sys_stat(void*); 265 virtual int sys_close(); 266}; 267 268 269inline int ios::readable() { return rdbuf()->_flags & 4 ; } 270inline int ios::writable() { return rdbuf()->_flags & 8 ; } 271inline int ios::is_open() {return rdbuf()->_flags & 4 +8 ;} 272 273 274 275 276//# 25 "/usr/latest/lib/g++-include/iostream.h" 2 3 277 278 279class istream; class ostream; 280typedef istream& (*__imanip)(istream&); 281typedef ostream& (*__omanip)(ostream&); 282 283extern istream& ws(istream& ins); 284extern ostream& flush(ostream& outs); 285extern ostream& endl(ostream& outs); 286extern ostream& ends(ostream& outs); 287 288class ostream : public ios 289{ 290 void do_osfx(); 291 public: 292 ostream(); 293 ostream(streambuf* sb, ostream* tied=__null ); 294 ~ostream(); 295 296 int opfx() { if (!good()) return 0; if (_tie) _tie->flush(); return 1; } 297 void osfx() { if (flags() & (ios::unitbuf|ios::stdio)) 298 do_osfx(); } 299 streambuf* ostreambuf() const { return _strbuf; } 300 ostream& flush(); 301 ostream& put(char c); 302 ostream& write(const char *s, int n); 303 ostream& write(const unsigned char *s, int n) { return write((char*)s, n);} 304 ostream& write(const void *s, int n) { return write((char*)s, n);} 305 ostream& seekp(streampos); 306 ostream& seekp(streamoff, _seek_dir); 307 streampos tellp(); 308 ostream& form(const char *format ...); 309 ostream& vform(const char *format, char* args); 310}; 311 312extern ostream& operator<<(ostream&, char c); 313inline ostream& operator<<(ostream& os, unsigned char c) 314{ return os << (char)c; } 315 316extern ostream& operator<<(ostream&, const char *s); 317inline ostream& operator<<(ostream& os, const unsigned char *s) 318{ return os << (const char*)s; } 319 320 321extern ostream& operator<<(ostream&, void *p); 322extern ostream& operator<<(ostream&, int n); 323extern ostream& operator<<(ostream&, long n); 324extern ostream& operator<<(ostream&, unsigned int n); 325extern ostream& operator<<(ostream&, unsigned long n); 326inline ostream& operator<<(ostream& os, short n) {return os << (int)n;} 327inline ostream& operator<<(ostream& os, unsigned short n) 328{return os << (unsigned int)n;} 329extern ostream& operator<<(ostream&, float n); 330extern ostream& operator<<(ostream&, double n); 331inline ostream& operator<<(ostream& os, __omanip func) { return (*func)(os); } 332extern ostream& operator<<(ostream&, streambuf*); 333 334class istream : public ios 335{ 336 int _gcount; 337 public: 338 istream(); 339 istream(streambuf* sb, ostream*tied=__null ); 340 ~istream(); 341 streambuf* istreambuf() const { return _strbuf; } 342 istream& get(char& c); 343 istream& get(unsigned char& c); 344 istream& read(char *ptr, int n); 345 istream& read(unsigned char *ptr, int n) { return read((char*)ptr, n); } 346 istream& read(void *ptr, int n) { return read((char*)ptr, n); } 347 348 istream& getline(char* ptr, int len, char delim = '\n'); 349 istream& get(char* ptr, int len, char delim = '\n'); 350 istream& gets(char **s, char delim = '\n'); 351 int ipfx(int need) { 352 if (!good()) { set(ios::failbit); return 0; } 353 if (_tie && (need == 0 || rdbuf()->in_avail() < need)) _tie->flush(); 354 if (!need && (flags() & ios::skipws) && !ws(*this)) return 0; 355 return 1; 356 } 357 int ipfx0() { 358 if (!good()) { set(ios::failbit); return 0; } 359 if (_tie) _tie->flush(); 360 if ((flags() & ios::skipws) && !ws(*this)) return 0; 361 return 1; 362 } 363 int ipfx1() { 364 if (!good()) { set(ios::failbit); return 0; } 365 if (_tie && rdbuf()->in_avail() == 0) _tie->flush(); 366 return 1; 367 } 368 int get() { if (!ipfx1()) return (-1) ; 369 int ch = _strbuf->sbumpc(); 370 if (ch == (-1) ) set(ios::eofbit); 371 return ch; } 372 int peek() { if (!ipfx1()) return (-1) ; 373 int ch = _strbuf->sgetc(); 374 if (ch == (-1) ) set(ios::eofbit); 375 return ch; } 376 int gcount() { return _gcount; } 377 istream& ignore(int n=1, int delim = (-1) ); 378 istream& seekg(streampos); 379 istream& seekg(streamoff, _seek_dir); 380 streampos tellg(); 381 istream& putback(char ch) { 382 if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit); 383 return *this;} 384 istream& unget() { 385 if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit); 386 return *this;} 387 388 istream& unget(char ch) { return putback(ch); } 389 int skip(int i); 390 391}; 392 393extern istream& operator>>(istream&, char*); 394inline istream& operator>>(istream& is, unsigned char* p) 395{ return is >> (char*)p; } 396 397extern istream& operator>>(istream&, char& c); 398extern istream& operator>>(istream&, unsigned char& c); 399 400extern istream& operator>>(istream&, int&); 401extern istream& operator>>(istream&, long&); 402extern istream& operator>>(istream&, short&); 403extern istream& operator>>(istream&, unsigned int&); 404extern istream& operator>>(istream&, unsigned long&); 405extern istream& operator>>(istream&, unsigned short&); 406extern istream& operator>>(istream&, float&); 407extern istream& operator>>(istream&, double&); 408inline istream& operator>>(istream& is, __imanip func) { return (*func)(is); } 409 410inline ostream& ostream::put(char c) { _strbuf->sputc(c); return *this; } 411 412class iostream : public ios { 413 int _gcount; 414 public: 415 iostream(); 416 iostream(streambuf* sb, ostream*tied=__null ); 417 operator istream&() { return *(istream*)this; } 418 operator ostream&() { return *(ostream*)this; } 419 ~iostream(); 420 421 istream& get(char& c) { return ((istream*)this)->get(c); } 422 istream& get(unsigned char& c) { return ((istream*)this)->get(c); } 423 istream& read(char *ptr, int n) { return ((istream*)this)->read(ptr, n); } 424 istream& read(unsigned char *ptr, int n) 425 { return ((istream*)this)->read((char*)ptr, n); } 426 istream& read(void *ptr, int n) 427 { return ((istream*)this)->read((char*)ptr, n); } 428 istream& getline(char* ptr, int len, char delim = '\n') 429 { return ((istream*)this)->getline(ptr, len, delim); } 430 istream& get(char* ptr, int len, char delim = '\n') 431 { return ((istream*)this)->get(ptr, len, delim); } 432 istream& gets(char **s, char delim = '\n') 433 { return ((istream*)this)->gets(s, delim); } 434 istream& ignore(int n=1, int delim = (-1) ) 435 { return ((istream*)this)->ignore(n, delim); } 436 int ipfx(int need) { return ((istream*)this)->ipfx(need); } 437 int ipfx0() { return ((istream*)this)->ipfx0(); } 438 int ipfx1() { return ((istream*)this)->ipfx1(); } 439 int get() { return _strbuf->sbumpc(); } 440 int peek() { return ipfx1() ? _strbuf->sgetc() : (-1) ; } 441 int gcount() { return _gcount; } 442 istream& putback(char ch) { return ((istream*)this)->putback(ch); } 443 istream& unget() { return ((istream*)this)->unget(); } 444 istream& seekg(streampos pos) { return ((istream*)this)->seekg(pos); } 445 istream& seekg(streamoff off, _seek_dir dir) 446 { return ((istream*)this)->seekg(off, dir); } 447 streampos tellg() { return ((istream*)this)->tellg(); } 448 449 istream& unget(char ch) { return putback(ch); } 450 451 452 453 int opfx() { return ((ostream*)this)->opfx(); } 454 void osfx() { ((ostream*)this)->osfx(); } 455 ostream& flush() { return ((ostream*)this)->flush(); } 456 ostream& put(char c) { return ((ostream*)this)->put(c); } 457 ostream& write(const char *s, int n) 458 { return ((ostream*)this)->write(s, n); } 459 ostream& write(const unsigned char *s, int n) 460 { return ((ostream*)this)->write((char*)s, n); } 461 ostream& write(const void *s, int n) 462 { return ((ostream*)this)->write((char*)s, n); } 463 ostream& form(const char *format ...); 464 ostream& vform(const char *format, char* args) 465 { return ((ostream*)this)->vform(format, args); } 466 ostream& seekp(streampos pos) { return ((ostream*)this)->seekp(pos); } 467 ostream& seekp(streamoff off, _seek_dir dir) 468 { return ((ostream*)this)->seekp(off, dir); } 469 streampos tellp() { return ((ostream*)this)->tellp(); } 470}; 471 472extern istream cin; 473extern ostream cout, cerr, clog; 474 475struct Iostream_init { } ; 476 477inline ios& dec(ios& i) 478{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; } 479inline ios& hex(ios& i) 480{ i.setf(ios::hex, ios::dec|ios::hex|ios::oct); return i; } 481inline ios& oct(ios& i) 482{ i.setf(ios::oct, ios::dec|ios::hex|ios::oct); return i; } 483 484 485//# 7 "/usr/latest/lib/g++-include/stream.h" 2 3 486 487 488extern char* form(const char*, ...); 489 490extern char* dec(long, int=0); 491extern char* dec(int, int=0); 492extern char* dec(unsigned long, int=0); 493extern char* dec(unsigned int, int=0); 494 495extern char* hex(long, int=0); 496extern char* hex(int, int=0); 497extern char* hex(unsigned long, int=0); 498extern char* hex(unsigned int, int=0); 499 500extern char* oct(long, int=0); 501extern char* oct(int, int=0); 502extern char* oct(unsigned long, int=0); 503extern char* oct(unsigned int, int=0); 504 505inline istream& WS(istream& str) { return ws(str); } 506 507 508//# 9 "test.C" 2 509 510 511class Y { 512public: 513 Y() {} 514 virtual const char *stringify() = 0; 515 virtual char *stringify2() const = 0; // { dg-error "overriding" } 516}; 517 518class X: public Y { 519public: 520 X(): Y() {} 521 const char *stringify(); // { dg-error "candidate" } 522 const char *stringify2() const; // { dg-error "candidate|conflicting return type" } 523}; 524 525char * 526X::stringify() const // { dg-error "does not match" } 527{ 528 return "stringify"; 529} 530 531const char * 532X::stringify2() // { dg-error "does not match" } 533{ 534 return "stringify2"; 535} 536 537main() 538{ 539 X x; 540 Y& y = x; 541 542 cout << "x\n"; 543 cout << x.stringify() << '\n'; 544 cout << x.stringify2() << '\n'; 545 546 cout << "y\n"; 547 cout << y.stringify() << '\n'; 548 cout << y.stringify2() << '\n'; 549} 550