[gnu.g++.bug] IMPORTANT: Compiler CRASH BUG isolated

jj@idris.id.dk (Jesper Joergensen [ris]) (01/19/90)

This is an IMPORTANT followup on a  Looooonng  bug report I posted yesterday,
where I included a lot of preprocessed source code, so that you could reproduce
the BUG. The compiler crashes with a "segmentation violation", while processing
a constructor call in value context, i.e. inside an expression.

I have now ISOLATED the BUG and found that my program was illegal with respect
to the member function visibility of C++, as soon as I corrected the visibility
of the function in question no compiler crash occured.

Below is two examples which will demonstrate the problem thoroughly, one with
and one without compiler crash.

I AM VERY SORRY THAT I TROUBLED YOU WITH THE LONG POSTING YESTERDAY, BUT I
COULDN'T ISOLATE THE BUG AT THAT TIME (next time I won't submit bug reports
late in the evening).

****** Example WITHOUT CRASH start ******
class Test {
  int member ;
public:
  Test(int member1) {
    member = member1 ;
  }
} ;

int main(int argc, const char *argv[]) {
  Test x(2) ;
  x = Test(7) ;
  return 0 ;
}
******* Example WITHOUT CRASH end *******

The above example compiles without any errors of any kind, since there aren't
any (knock, knock ... :^). However, if the constructor is made private, as in
the below example, the compiler will crash instead of making a suitable error
message.

******* Example WITH CRASH start *******
class Test {
  int member ;
  Test(int member1) {
    member = member1 ;
  }
public:
} ;

int main(int argc, const char *argv[]) {
  Test x(2) ;
  x = Test(7) ;				// This is the offending line
  return 0 ;
}
******** Example WITH CRASH end ********

When running the compiler on the above example I get the following output.

******** CRAHS compilation start ********
% pwd
/usr/users/jj/ruby/id
% g++ -v ctortest.cc -O -S
g++ version 1.36.3- (based on GCC 1.36)
 /usr/local/lib/gcc-cpp -+ -v -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dvax -Dunix -D__vax__ -D__unix__ -D__OPTIMIZE__ ctortest.cc /usr/tmp/cc021595.cpp
GNU CPP version 1.36
 /usr/local/lib/gcc-cc1plus /usr/tmp/cc021595.cpp -quiet -dumpbase ctortest.cc -O -version -o ctortest.s
GNU C++ version 1.36.3- (based on GCC 1.36) (vax) compiled by GNU C version 1.36.
default target switches: -munix
ctortest.cc:7: warning: all class member functions are private
ctortest.cc:7: warning: class Test only defines private constructors and has no friends
ctortest.cc: In function int main (int, const char **):
ctortest.cc:10: constructor `Test::Test (int)' is private
ctortest.cc:10: in base initialization for class `Test'
ctortest.cc:11: Segmentation violation
g++: Program cc1plus got fatal signal 11.
********* CRAHS compilation end *********

All the leading error messages are correct, due to the illegal use of the
private constructor. The use within value context in line 11, however results
in a crash instead of an error message.

That should be all, oh BTW

I am using:	g++ version 1.36.3-
based on:	gcc version 1.36
under:		Ultrix V2.2-1 Worksystem V1.1 System #2
on a:		DEC VAXstation 2000

though I don't think that has anything to do with the bug.


Once again I apologize for having troubled you with the long posting yesterday.

	Good luck, hopes this clarification helps

	Jesper Jorgensen	jj@idris.id.dk

	Research associate
	Department of Computer Science
	Technical University of Denmark
	DK-2800 Lyngby
	DENMARK