[gnu.g++.bug] Problem with streams.

gordon%stats.ucl.ac.uk@NSS.CS.UCL.AC.UK (Gordon Joly Statistics UCL) (01/10/89)

The following program compiles and runs with g++ 1.32 under
SunOS 3.4 on a SUN 3/160. gdb+ version 2.8.1.

9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9

     1	#include <stream.h>
     2	
     3	main()
     4	{
     5		char c;
     6	
     7		switch (cin.rdstate()){
     8		case _good: cerr << "Status good\n"; break;
     9		case _eof: cerr << "Status eof\n"; break;
    10		case _fail: cerr << "Status fail\n"; break;
    11		case _bad: cerr << "Status bad\n"; break;
    12		default: cerr << "PANIC";
    13		}
    14		cerr.flush();
    15		while ( cin.get(c) )
    16		{
    17			cerr << " Char was : "; cerr.put(c); cerr << "\n";
    18			switch (cin.rdstate()){
    19			case _good: cerr << "Status good\n"; break;
    20			case _eof: cerr << "Status eof\n"; break;
    21			case _fail: cerr << "Status fail\n"; break;
    22			case _bad: cerr << "Status bad\n"; break;
    23			default: cerr << "PANIC";
    24			}
    25			cerr.flush();
    26		}
    27		cerr << "ABOUT TO DIE\n";
    28		switch (cin.rdstate()){
    29		case _good: cerr << "Status good\n"; break;
    30		case _eof: cerr << "Status eof\n"; break;
    31		case _fail: cerr << "Status fail\n"; break;
    32		case _bad: cerr << "Status bad\n"; break;
    33		default: cerr << "PANIC";
    34		}
    35		cerr.flush();
    36	}
9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9

Here is the tail of the gdb+ output.

9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9
(gdb+) i b
Breakpoints:
Num Enb   Address    Where
#1   y  0x0000243e  in main (nod3.cc line 27)
#2   y  0x00002334  in main (nod3.cc line 18)
(gdb+) 
Bpt 2, main () (nod3.cc line 18)
18                      switch (cin.rdstate()){
1: cin = {
<struct File> = {fp = 0x20850, nm = 0x235bc "(stdin)", rw = 1 '\001', state = _good, stat 
= 0}
members of struct istream: tied_to = 0x0}
(gdb+) c
Continuing.
Status good
^D
Bpt 1, main () (nod3.cc line 27)
27              cerr << "ABOUT TO DIE\n";
1: cin = {
<struct File> = {fp = 0x20850, nm = 0x235bc "(stdin)", rw = 1 '\001', state = 3, stat = 0}
members of struct istream: tied_to = 0x0}                             ^^^^^^^^^
(gdb+) c                                                              ^^^^^^^^^
Continuing.
ABOUT TO DIE
PANIC
Program exited with code 070.
(gdb+) 


9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9

Should cin.state be 3 ? Cf page 238, Section 8.4.2 of Stroustrup.
Please send a copy of any reply to me directly.
Thanks,

Gordon Joly.

Surface mail: Dr. G.C.Joly, Department of Statistical Science,
      University College London, Gower Street, LONDON WC1E 6BT, U.K.
E-mail:  					   | Tel: +44 1 387 7050
 JANET (U.K. network) gordon@uk.ac.ucl.stats       |      extension 3636
       (Arpa/Internet form: gordon@stats.ucl.ac.uk)| FAX: +44 1 387 8057
Relays: ARPA @nss.cs.ucl.ac.uk                     |
        EAN: @ean-relay.ac.uk                      |
	CSNET: %nss.cs.ucl.ac.uk@relay.cs.net      |
        BITNET: %ukacrl.bitnet@cunyvm.cuny.edu, @ac.uk
        EARN: @ukacrl.bitnet, @AC.UK, @uk.ac.earn-relay
By uucp/Usenet: ....!uunet!mcvax!ukc!stats.ucl.ac.uk!gordon