internal compiler error in C++ front end

Mark Mitchell
Mon Sep 29 09:56:00 GMT 1997

>>>>> "Joe" == Joe Buck <> writes:

    Joe> The following program blows up egcs (every version since at
    Joe> least 970910 through the present version):

    Joe> #include <vector> vector<int> v(3,5);

    Joe> I've verified that the crash occurs on both Linux and
    Joe> Solaris/sparc.

I'll take a look at this in the next few days.

    Joe> The message is

    Joe> /usr/local/egcs/include/g++/vector.h:103: Internal compiler
    Joe> error 97.  /usr/local/egcs/include/g++/vector.h:103: Please
    Joe> submit a full bug report to `'.

    Joe> vector<double> v(5, 3.0);

    Joe> works fine.

    Joe> vector<double> v(3.0, 5);

    Joe> is quietly accepted, but seems bogus.  I suppose the compiler
    Joe> can assume InputIterator == double, but this seems strange.

    Joe> does not crash, but

    Joe> vector<double> v(3, 5);

    Joe> does: so does the illegal vector<double> v(3.0, 3.0);

    Joe> It seems that there is some confusion between
    Joe> vector<T>(size_type,const T&) and the template member
    Joe> vector<T>(Iterator,Iterator).  The odd thing is that for
    Joe> vector<int>(32,3) the second seems in some ways a better
    Joe> match, but STL is banking on the first one being chosen! (to
    Joe> get a vector of 32 elements with value 3).

    Joe> While it's likely that this particular case would not have
    Joe> been caught, this does suggest that the libstdc++ tests are
    Joe> too weak; tvector does not try out even 1/10 of the vector
    Joe> class functionality.  Tests that at least call each method of
    Joe> vector (and the other STL classes) at least once would be a
    Joe> great help.  (Perhaps others already have something: the
    Joe> ObjectSpace free tests seem too weak).

Mark Mitchell
Stanford University

More information about the Gcc mailing list