From owner-freebsd-stable@FreeBSD.ORG Tue Apr 29 12:01:08 2003 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id F3D2837B401 for ; Tue, 29 Apr 2003 12:01:07 -0700 (PDT) Received: from pmarquis.com (h002078d55764.ne.client2.attbi.com [24.218.149.6]) by mx1.FreeBSD.org (Postfix) with ESMTP id 366FF43FD7 for ; Tue, 29 Apr 2003 12:01:05 -0700 (PDT) (envelope-from pmarquis@pobox.com) Received: from localhost (localhost [127.0.0.1]) by pmarquis.com (8.12.8/8.12.8) with ESMTP id h3TJ134h069250; Tue, 29 Apr 2003 15:01:03 -0400 (EDT) (envelope-from pmarquis@pobox.com) From: Paul Marquis To: Simon Barner Date: Tue, 29 Apr 2003 15:00:53 -0400 User-Agent: KMail/1.5.1 References: <20030429143841.GA5828@zi025.glhnet.mhn.de> In-Reply-To: <20030429143841.GA5828@zi025.glhnet.mhn.de> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Description: clearsigned data Content-Disposition: inline Message-Id: <200304291501.02430.pmarquis@pobox.com> cc: freebsd-stable@freebsd.org Subject: Re: Bug in g++ 2.95.4 (Pointer to member functions) X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Apr 2003 19:01:08 -0000 =2D----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I think your public methods for the class Class should be static. On Tuesday 29 April 2003 10:38 am, Simon Barner wrote: > Hi, > > I think I have discovered a bug in FreeBSD 4.8-STABLE's system C++ > compiler: > > % gcc -v > % Using builtin specs. > % gcc version 2.95.4 20020320 [FreeBSD] > > Here is a stripped down example that can be used to reproduce the > bug: > > // ----------- begin bug.cpp ----------- > #include > class Class { > public: > void M1 (void) { cout << "M1" << endl; }; > void M2 (void) { cout << "M2" << endl; }; > void M3 (void) { cout << "M3" << endl; }; > }; > > typedef void (Class::*ClassMemberFn)(void); > #define callMemberFunction(object,ptrToMember)=20 > ((object).*(ptrToMember)) > > int main (int argc, char* argv[]) { > Class obj; > > // This works fine: Array size =3D=3D 2 > ClassMemberFn a[2] =3D { &Class::M1, &Class::M2}; > for (unsigned int i=3D0; i<2; ++i) { > callMemberFunction (obj, a[i]) (); > } > > > // This will cause the internal compiler error: Array size > 2 > ClassMemberFn b[3] =3D { &Class::M1, &Class::M2,&Class::M3}; > for (unsigned int i=3D0; i<3; ++i) { > callMemberFunction (obj, b[i]) (); > } > return 0; > } > > // ----------- end bug.cpp ----------- > > > This is how you can reproduce the internal compiler error: > % gcc -c bug.cpp > % bug.cpp: In function `int main(int, char **)': > % bug.cpp:20: Internal compiler error in `const_hash', at > varasm.c:2373 % Please submit a full bug report. > % See for > instructions. > > I have tested the same source (which is an adoption from the C++ > FAQ-lite, > http://www.parashift.com/c++-faq-lite/pointers-to-members.html) an > the following systems: > > Success: > GCC 2.9.2, SunOS 5.8 Generic_108528-19 sun4u sparc SUNW,Ultra-60 > GCC 3.2.2, SunOS 5.8 Generic_108528-19 sun4u sparc SUNW,Ultra-60 > GCC 2.9.6 (redhat) , Linux athalle1 2.4.18-27.7.xsmp #1 SMP > > Same compiler error: > GCC 2.9.2, Linux athalle1 2.4.18-27.7.xsmp #1 SMP > > My conclusion is, that this bug is i386 specific, and that it has > been fixed in g++ 3.x and Redhat's 2.96 proprietary version. > > What should I do (apart from using gcc 3.x from the ports > collection)? > > Should I file a bug at the GCC gnats site, but I think they do not > maintain GCC 2.9.4 any longer (I have seen according comments at > the end of closed bug reports)? > > Or should I send a PR? Is there any chance that this bug will be > fixed? > > I also had a look at the gcc source file from that error message, > but it's not very helpful as it's the location of an abort () call > only... > > Cheers, > Simon =2D --=20 Paul Marquis pmarquis@pobox.com =2D----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (FreeBSD) iD8DBQE+rsvqIuLAUo3z6B0RAlsCAJsFuNqfb6qcVf1zpCXUKi9yzVqo2QCfbHEN yvCB4MLhLHGcNphP/srT9iY=3D =3DOW8B =2D----END PGP SIGNATURE-----