>Submitter-Id: net >Originator: "H. S. Teoh" <[EMAIL PROTECTED]> >Organization: The Debian Project >Confidential: no >Synopsis: >Severity: non-critical >Priority: medium >Category: c++ >Class: ice-on-illegal-code >Release: 3.2.2 (Debian) (Debian unstable) >Environment: System: Debian GNU/Linux (unstable) Architecture: i686 host: i386-linux Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,proto,pascal,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.2 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-java-gc=boehm --enable-objc-gc i386-linux Thread model: posix gcc version 3.2.2 20021212 (Debian prerelease) >Description: [ Reported to the Debian BTS as report #180937. Please CC [EMAIL PROTECTED] on replies. Log of report can be found at http://bugs.debian.org/180937 ]
A regression from 2.95, fixed in 3.3: /* * g++ 3.2 bug in handling switch statements that contain object declarations * constructed using objects declared outside the switch. */ class common { }; class someclass { public: someclass(common *c) { } ~someclass() { } }; class someotherclass { public: someotherclass(common *c) { } ~someotherclass() { } }; int main(int argc, char *argv[]) { enum { CHOICE_A, CHOICE_B } choice = CHOICE_A; common commonobj; switch (choice) { case CHOICE_A: someclass obj1(&commonobj); // do something break; case CHOICE_B: someotherclass obj2(&commonobj); // do something break; default: break; } } class common { }; class someclass { public: someclass(common *c) { } ~someclass() { } }; class someotherclass { public: someotherclass(common *c) { } ~someotherclass() { } }; int main(int argc, char *argv[]) { enum { CHOICE_A, CHOICE_B } choice = CHOICE_A; common commonobj; switch (choice) { case CHOICE_A: someclass obj1(&commonobj); break; case CHOICE_B: someotherclass obj2(&commonobj); break; default: break; } } $ g++-3.2 bug-180937.cc bug-180937.cc: In function `int main(int, char**)': bug-180937.cc:29: jump to case label bug-180937.cc:26: crosses initialization of `someclass obj1' bug-180937.cc:33: jump to case label bug-180937.cc:30: crosses initialization of `someotherclass obj2' bug-180937.cc:26: crosses initialization of `someclass obj1' Internal compiler error: Error reporting routines re-entered. Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions. both g++-2.95.3 and current 3.3 don't ICE. >How-To-Repeat: >Fix: