public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* libstdc++/6896: ofstream, ^D and flushing
@ 2002-06-01 13:06 Peter Schmid
  0 siblings, 0 replies; only message in thread
From: Peter Schmid @ 2002-06-01 13:06 UTC (permalink / raw)
  To: gcc-gnats


>Number:         6896
>Category:       libstdc++
>Synopsis:       ofstream, ^D and flushing
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jun 01 13:06:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Peter Schmid
>Release:        3.1.1 20020528 (prerelease)
>Organization:
TU Darmstadt
>Environment:
System: Linux kiste 2.4.18 #8 Sat Mar 9 15:33:15 CET 2002 i686 unknown
Architecture: i686
SuSE 7.3
binutils 20020428
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../gcc/configure --enable-shared --disable-nls --enable-threads=posix --enable-languages=c,c++,f77,objc
>Description:
When I run the testcase included in PR libstdc++/6750 and type ^D on the
keyboard I get a surprising result. The output from the binary compiled
by gcc 2.95.3 differs from the output by the binary
compiled by gcc 3.1. Maybe the result of the program run is undefined
when ^D is typed in?

>How-To-Repeat:
source code tio.C

#include <iostream>
#include <fstream>

#define OUTPUT_FILE	"tio.dat"
#define BUFFSIZ		2048

int main()
{
  using namespace std; 
  char buff[BUFFSIZ];

  ofstream output(OUTPUT_FILE, ios::out);
  if(!output) {
    cerr << "Cannot create " << OUTPUT_FILE << endl;
    exit(1);
  }
  cout << "Output file will be '" << OUTPUT_FILE << "'." << endl;

  cout<<"rdstate before reading from cin: "
      << cin.rdstate() << endl;
  cout<<"good eof fail bad "
      << ios::goodbit << " "
      << ios::eofbit << " "
      << ios::failbit << " "
      << ios::badbit << endl;
	
  cout << "Enter line 1 of 3: ";
  cin.getline(buff, BUFFSIZ);
  output << buff << endl;
  cerr << "cin state: " << cin.rdstate() << endl;
  cerr << "output state: " << output.rdstate() << endl;

  cout << "Enter line 2 of 3: ";
  cin.getline(buff, BUFFSIZ);					       
  output << buff << endl;
  cerr << "cin state: " << cin.rdstate() << endl;
  cerr << "output state: " << output.rdstate() << endl;

  cout << "Enter line 3 of 3: ";
  cin.getline(buff, BUFFSIZ);
  output << buff << endl;
  cerr << "cin state: " << cin.rdstate() << endl;
  cerr << "output state: " << output.rdstate() << endl;
}

g++ -v -o tio tio.C -W -Wall
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/specs
Configured with: ../gcc/configure --enable-shared --disable-nls --enable-threads=posix --enable-languages=c,c++,f77,objc
Thread model: posix
gcc version 3.1.1 20020528 (prerelease)
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/cc1plus -v -D__GNUC__=3 -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=1 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ tio.C -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase tio.C -W -Wall -version -o /tmp/cca2VKFy.s
GNU CPP version 3.1.1 20020528 (prerelease) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.1.1 20020528 (prerelease) (i686-pc-linux-gnu)
	compiled by GNU C version 3.1.1 20020528 (prerelease).
ignoring nonexistent directory "NONE/include"
ignoring nonexistent directory "/usr/local/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include/g++-v3
 /usr/local/include/g++-v3/i686-pc-linux-gnu
 /usr/local/include/g++-v3/backward
 /usr/local/include
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/include
 /usr/include
End of search list.
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/../../../../i686-pc-linux-gnu/bin/as -V -Qy -o /tmp/ccrCA9D3.o /tmp/cca2VKFy.s
GNU assembler version 020428 (i686-pc-linux-gnu) using BFD version 020428 20020428
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o tio /usr/lib/crt1.o /usr/lib/crti.o /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/crtbegin.o -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1 -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/../../../../i686-pc-linux-gnu/lib -L/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/../../.. /tmp/ccrCA9D3.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1.1/crtend.o /usr/lib/crtn.o

gcc 3.1
./tio
Output file will be 'tio.dat'.
rdstate before reading from cin: 0
good eof fail bad 0 2 4 1
Enter line 1 of 3: cin state: 6
output state: 0
cin state: 6
output state: 0
cin state: 6
output state: 0
Enter line 2 of 3: Enter line 3 of 3: peter@kiste:~> 

gcc 2.95.3
./tio
Output file will be 'tio.dat'.
rdstate before reading from cin: 0
good eof fail bad 0 1 2 4
Enter line 1 of 3: cin state: 3
output state: 0
Enter line 2 of 3: cin state: 3
output state: 0
Enter line 3 of 3: cin state: 3
output state: 0
peter@kiste:~>
>Fix:
	
>Release-Note:
>Audit-Trail:
>Unformatted:


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-06-01 20:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-06-01 13:06 libstdc++/6896: ofstream, ^D and flushing Peter Schmid

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