Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!MCC.COM!rfg From: rfg@MCC.COM (Ron Guilmette) Newsgroups: gnu.g++.bug Subject: BUG(s) in G++ 1.35.0 (pre-release) Message-ID: <8904221600.AA15920@riunite.aca.mcc.com> Date: 22 Apr 89 16:00:30 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 131 The following source file checks that it is always illegal to specify the return type for a constructor or a destructor. When compiled with G++ 1.35.0 (pre-release, Apr. 20th), it is apparent that the compiler does (incorrectly) allow you to: a) specify the return type of a destructor as void, and b) specify the return type of a destructor as void*, and c) specify the return type of a constructor as class_name*, where "class_name" is the name of the containing class. I believe that (a), (b), and (c) should all causes errors. Another thing to note (in the compile log shown below the code) is that the errors and warnings which *are* issued for explicit return type specifications on constructors/destructors are inconsistant. Shouldn't there be one single message like: illegal return type spec for constructor or destructor which is issued for all such cases? Here is a list of the missed errors in the code below: b036 had missed error(s) as follows: 18: void ~class1 (); // ERROR 28: void* ~class3 (); // ERROR 37: class5* class5 (); // ERROR 44: void ~class6 () { // ERROR 58: void* ~class8 () { // ERROR 70: class10* class10 () { // ERROR ------------------------------------------------------------------------ // Check that it is illegal to specify a return type in a // declaration or a definition of either a constructor or // a destructor. // // Cases: // void type // int type // void* type // class type // class* type // // declarations & definitions // // constructors & destructors struct class1 { void class1 (); // ERROR void ~class1 (); // ERROR }; struct class2 { int class2 (); // ERROR int ~class2 (); // ERROR }; struct class3 { void* class3 (); // ERROR void* ~class3 (); // ERROR }; struct class4 { class4 class4 (); // ERROR class4 ~class4 (); // ERROR }; struct class5 { class5* class5 (); // ERROR class5* ~class5 (); // ERROR }; struct class6 { void class6 () { // ERROR }; void ~class6 () { // ERROR }; }; struct class7 { int class7 () { // ERROR }; int ~class7 () { // ERROR }; }; struct class8 { void* class8 () { // ERROR }; void* ~class8 () { // ERROR }; }; struct class9 { class9 class9 () { // ERROR }; class9 ~class9 () { // ERROR }; }; struct class10 { class10* class10 () { // ERROR }; class10* ~class10 () { // ERROR }; }; --------------------------------------------------------------------------- /usr/local/src/src/g++/build/sun3/1.35-.0-.0/g++ -B/usr/local/src/src/g++/build/sun3/1.35-.0-.0/ -Wall -Wwrite-strings -S -v b036.C g++ version 1.35.0- /usr/local/src/src/g++/build/sun3/1.35-.0-.0/cpp -+ -v -undef -D__GNU__ -D__GNUG__ -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -Wall -D__HAVE_68881__ -Dmc68020 b036.C /tmp/cca15886.cpp GNU CPP version 1.35.0- /usr/local/src/src/g++/build/sun3/1.35-.0-.0/c++ /tmp/cca15886.cpp -quiet -dumpbase b036.C -Wall -Wwrite-strings -noreg -version -o b036.s GNU C++ version 1.35.0- (68k, MIT syntax) compiled by GNU C version 1.34.1. b036.C:17: invalid return type given for constructor b036.C:22: invalid return type given for constructor b036.C:23: non-void return type specified for destructor b036.C:27: constructor declared with invalid return type b036.C:32: invalid return type given for constructor b036.C:33: non-void return type specified for destructor b036.C:37: warning: declaration of return type for constructor redundant b036.C:38: non-void return type specified for destructor b036.C:42: invalid return type given for constructor b036.C:49: invalid return type given for constructor b036.C:51: non-void return type specified for destructor b036.C:56: constructor declared with invalid return type b036.C:63: invalid return type given for constructor b036.C:65: non-void return type specified for destructor b036.C:70: warning: declaration of return type for constructor redundant b036.C:72: non-void return type specified for destructor