[gnu.g++.bug] 1.36.0- violating segments

scp@SFI.SANTAFE.EDU ("Stephen C. Pope") (10/05/89)

I believe (though I'm not exactly sure) that I'm doing
something illegal with the const T& member flagged below.
In any case, g++`s output is behavior is not very helpful
(SparcStation, SunOS4.0.3c, this is the now-obsolete
g++.ytar.Z w/ patches.  Could someone try it on the new 1.36.0-???)

gcc -v -O -fstrength-reduce -c t.cc
gcc version 1.36.0- (based on GCC 1.35.98+)
 /usr/local/lib/gcc-cpp -+ -v -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ -D__OPTIMIZE__ t.cc /tmp/cca03730.cpp
GNU CPP version 1.35.98
 /usr/local/lib/gcc-cc1plus /tmp/cca03730.cpp -quiet -dumpbase t.cc -fstrength-reduce -O -version -o /tmp/cca03730.s
GNU C++ version 1.36.0- (based on GCC 1.35.98+) (sparc) compiled by GNU C version 1.35.98.
default target switches: -mfpu -mepilogue
t.cc: In method int TP::get_r ():
t.cc:19: Segmentation violation
gcc: Program cc1plus got fatal signal 11.


heres the code:

class T {
    const int r;
  public:
    T(int);
    int const get_r();
};

class TP {
    const T& t;	    	    	// legal???
  public:
    TP(int);
    int get_r();
    void do_something(int);
};

T::T(int i) : r(i) {}
inline int T::get_r() { return r; }
TP::TP(int i) : t(*(new T(i))) {}
inline int TP::get_r() { return t.get_r(); }
void TP::do_something(int i)
{
    int a, b, c;
    a = 0;
    b = 1;
    c = i * b + a;
}

main()
{
    TP t(16);
    int s = 0;
    for( int i = 0; i < t.get_r(); ++i )  {
	s += i;
	t.do_something(s);
    }
    return s;
}

    
Stephen Pope
scp@sfi.santafe.edu