Compile this trivial program  

---------
#include <iostream>
#include <fstream>

int main() {
  std::ifstream fin("t3.cpp");
}
---------
with

g++ -g -O2 -Wall -pthread t3.cpp

Running this program dumps core.

Leaving out the option -pthread it does not abort and works o.k.

Root cause seems to be that the std::ifstream class has different size with and
without -pthread (i.e. -DTHREAD_SAFE) since definition of ifstream member
std::__c_lock ==  __gthread_mutex_t is different with and without -pthread.

This is an AIX only symptom. __c_lock is an int without threads and posix_lock
with threads.

Since there is only one libstdc++ for both with and without threads weird
things will happen.

-- diagnosis program --
#include <fstream>
#include <iostream>

int main() {
  printf( "%ld\n",sizeof( std::ifstream));
  printf(" %ld\n", sizeof( __gthread_mutex_t));

}
----------------
Output with -pthread
 296
 52
--- without
248
 4
------------


I would propose to compile gcc code always with THREAD_SAFE alway on.


-- 
           Summary: ifstream broken
           Product: gcc
           Version: 4.4.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: o dot flebbe at science-computing dot de
 GCC build triplet: powerpc-ibm-aix5.3.0.0
  GCC host triplet: powerpc-ibm-aix5.3.0.0
GCC target triplet: powerpc-ibm-aix5.3.0.0


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

Reply via email to