Compiler details:
Target: mingw32
Configured with: ../../configure --prefix=/mingw --host=mingw32
--target=mingw32 --program-prefix= --with-as=/mingw/bin/
as.exe --with-ld=/mingw/bin/ld.exe --with-gcc --with-gnu-ld --with-gnu-as
--enable-threads --disable-nls --enable-langua
ges=c,c++ --disable-win32-registry --disable-shared --without-x
--enable-interpreter --enable-hash-synchronization --ena
ble-libstdcxx-debug --with-gmp-include=/projects/common/GMP/4.3.1
--with-gmp-lib=/projects/common/GMP/4.3.1/.libs --with
-mpfr-include=/projects/common/MPFR/2.4.1
--with-mpfr-lib=/projects/common/MPFR/2.4.1/.libs
Thread model: win32
gcc version 4.5.0 20090421 (experimental - lambda branch) (GCC)

Insertion into std::tr1::unordered_map generates segmentation fault. Here is
code sample:

#include <iostream>
#include <boost/unordered_map.hpp>
#include <unordered_map>
#include <string>
#include <time.h>
#include <stdio.h>

class ABC
{
public:
        ABC() : m_A(0) {;}
        ABC(int a) : m_A(a) {;}
        int A() const {return m_A;}
        bool operator ==(ABC const& other) const {return m_A == other.m_A;}
private:
        int m_A;

        friend std::ostream& operator << (std::ostream& os, ABC const& obj)
        {
                os << obj.m_A;
                return os;
        }
};

struct hash_ABC : std::unary_function<hash_ABC, size_t>
{
        size_t operator()(ABC const& v) const {return v.A();}
};

int main()
{
        typedef std::unordered_map<ABC, std::string, hash_ABC> dict_t;

        dict_t dic;

        ABC key(2);

        dic.insert(std::make_pair(ABC(1), std::string("One")));
        dic.insert(std::make_pair(key, std::string("Two")));
        dic.insert(std::make_pair(ABC(3), std::string("Three")));

        return 0;
}

My own investigations were shown what problem is within _M_allocate_node
function (include\c++\tr1_impl\hashtable, line #477). When I removed
__try/__catch block from this function all start work fine. In the original
case this function returns strange value (sometimes NULL, sometimes garbage).


-- 
           Summary: unordered_map insertion generates seg fault
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: comm_wolf at mail dot ru
 GCC build triplet: i386-pc-mingw
  GCC host triplet: i386-pc-mingw
GCC target triplet: i386-pc-mingw


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

Reply via email to