Article View: gnu.g++.bug
Article #1889BUG(s) in G++ 1.35.0 (pre-release)
From: Ron Guilmette
Date: Sat, 22 Apr 1989 16:00
Date: Sat, 22 Apr 1989 16:00
131 lines
4440 bytes
4440 bytes
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
Technical Details
Message-ID:
<8904221600.AA15920@riunite.aca.mcc.com>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!MCC.COM!rfgShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!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