I have seen bug 21198. My understanding is that refers to an operating system 
limit on the number of simultaneous files open. However if we attempt to reuse
the same stream using fclose to close it before fopen is called again
we still hit a limit. Under gentoo gcc runtime fails to open the file on the
1022th attempt.

Example source: gcc-bug.c/* W. B. Langdon, Crest, King's College, London 16 Jan
2009
gcc fails to open file 1021 times
*/

#include <stdio.h>

main(argc, argv)
int argc;
char *argv[];
{
  int j;
  FILE *fpt1;

  for(j=1;j<=1024;j++) {
    fpt1 = fopen("any_file.txt","r");
    if(!fpt1) {
      fprintf(stderr, "failed to open `any_file.txt',`r' %0x\n",fpt1);
      return;
    }
    close(fpt1);
    fprintf(stdout, "loop %d done\n",j);
  }
}

out put fragment:

loop 1017 done
loop 1018 done
loop 1019 done
loop 1020 done
loop 1021 done
failed to open `any_file.txt',`r' 0

Contents of any_file.txt:
here is a line of text

Request disgnostic output from compiler

Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: /var/tmp/portage/sys-devel/gcc-4.1.2/work/gcc-4.1.2/configure
--prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.1.2
--includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include
--datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2
--mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/man
--infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/info
--with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4
--host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec
--enable-nls --without-included-gettext --with-system-zlib --disable-checking
--disable-werror --enable-secureplt --disable-libunwind-exceptions
--disable-multilib --enable-libmudflap --disable-libssp --disable-libgcj
--with-arch=i686 --enable-languages=c,c++,treelang,fortran --enable-shared
--enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu
Thread model: posix
gcc version 4.1.2 (Gentoo 4.1.2 p1.0.2)
 /usr/libexec/gcc/i686-pc-linux-gnu/4.1.2/cc1 -E -quiet -v gcc-bug.c
-march=i686 -fpch-preprocess -o gcc-bug.i
ignoring nonexistent directory
"/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include
 /usr/include
End of search list.
 /usr/libexec/gcc/i686-pc-linux-gnu/4.1.2/cc1 -fpreprocessed gcc-bug.i -quiet
-dumpbase gcc-bug.c -march=i686 -auxbase gcc-bug -version -o gcc-bug.s
GNU C version 4.1.2 (Gentoo 4.1.2 p1.0.2) (i686-pc-linux-gnu)
        compiled by GNU C version 4.1.2 (Gentoo 4.1.2 p1.0.2).
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 4765ab829ec24257bff495f3c6370d71
 /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../i686-pc-linux-gnu/bin/as -V
-Qy -o gcc-bug.o gcc-bug.s
GNU assembler version 2.18 (i686-pc-linux-gnu) using BFD version (GNU Binutils)
2.18
 /usr/libexec/gcc/i686-pc-linux-gnu/4.1.2/collect2 --eh-frame-hdr -m elf_i386
-dynamic-linker /lib/ld-linux.so.2
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crti.o
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/crtbegin.o
-L/usr/lib/gcc/i686-pc-linux-gnu/4.1.2 -L/usr/lib/gcc/i686-pc-linux-gnu/4.1.2
-L/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../i686-pc-linux-gnu/lib
-L/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../.. gcc-bug.o -lgcc --as-needed
-lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/crtend.o
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crtn.o


-- 
           Summary: cannot reuse input stream 1022 times on same file
           Product: gcc
           Version: 4.1.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: william dot langdon at kcl dot ac dot uk


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38876

Reply via email to