[gnu.g++.bug] Invalid branch past temporary initialization

david@TERA.COM (David Callahan) (11/27/89)

Config.g++ sun3-nfp-os4.

A goto crosses initialization of compiler generated temporary which
generates an error messages and aborts compilation.
A work-around is to wrap the assignment in "a" in braces.

--------- file: gnu-bug1.c ----------

struct temp {
      int i ;
      temp() ;
      temp operator+(temp&) ;
} ;
extern int test() ;
extern "C" int exit(int) ;

main() {
      temp a,b,c,d ;
      if(test()) goto done ;
      a = b+c+d ; 
    done:
      exit(1) ;
}
----------- Sample compilation -----------
cd /home/tera/david/Cfront/
g++ -v -c gnu-bug1.c
gcc version 1.36.1 (based on GCC 1.36)
 /usr/local/lib/g++-1.36.1/gcc-cpp -+ -v -undef -D__GNUC__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -Dmc68020 gnu-bug1.c /usr/tmp/cca00984.cpp
GNU CPP version 1.36
 /usr/local/lib/g++-1.36.1/gcc-cc1plus /usr/tmp/cca00984.cpp -quiet -dumpbase gnu-bug1.c -version -o /usr/tmp/cca00984.s
GNU C++ version 1.36.1 (based on GCC 1.36) (68k, MIT syntax) compiled by GNU C version 1.36.
default target switches: -m68020 -mc68020 -mbitfield
gnu-bug1.c: In function int main ():
gnu-bug1.c:15: invalid jump to label `done'
gnu-bug1.c:14: crosses initialization of `_$tmp_0'

Compilation exited abnormally with code 1 at Sun Nov 26 10:31:25