[gnu.g++.bug] g++ 1.34.0 outputs invalid symbol table

jjc@UUNET.UU.NET (James Clark) (03/14/89)

G++ 1.34.0 seems to output an invalid symbol table.
I'm using a copy of g++ which I uucp'ed from osu-cis on Mar 11.

Script started on Mon Mar 13 16:45:43 1989
jclark% cat bug.c

struct foo {
  enum { A, B, C, D } n;
};

jclark% g++ -g -v -S bug.c
g++ version 1.34.0
 /usr/local/lib/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ bug.c /tmp/cca07197.cpp
GNU CPP version 1.34
 /usr/local/lib/gcc-c++ /tmp/cca07197.cpp -quiet -dumpbase bug.c -g -version -o bug.s
GNU C++ version 1.34.0 (sparc) compiled by GNU C version 1.34.
jclark% cat bug.s
gcc_compiled.:
	.stabs "bug.c",100,0,0,Ltext
Ltext:
.stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
.stabs "char:t2=r2;0;127;",128,0,0,0
.stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
.stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
.stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
.stabs "short int:t6=r1;-32768;32767;",128,0,0,0
.stabs "long long int:t7=r1;0;-1;",128,0,0,0
.stabs "short unsigned int:t8=r1;0;65535;",128,0,0,0
.stabs "long long unsigned int:t9=r1;0;-1;",128,0,0,0
.stabs "signed char:t10=r1;-128;127;",128,0,0,0
.stabs "unsigned char:t11=r1;0;255;",128,0,0,0
.stabs "float:t12=r1;4;0;",128,0,0,0
.stabs "double:t13=r1;8;0;",128,0,0,0
.stabs "long double:t14=r1;8;0;",128,0,0,0
.stabs "void:t15=15",128,0,0,0
.stabs "unknown type:t16=16",128,0,0,0
.stabs "$_0:T17=eD:3,C:2,B:1,A:0,;",128,0,0,0
.stabs "foo:T18=s4A:/217B:/217C:/217D:/217n:/217,0,32;;~;",128,0,0,0
.stabs "$_0:t17",128,0,0,0
.stabs "foo:t18",128,0,0,0
jclark% exit
jclark% 
script done on Mon Mar 13 16:46:17 1989

The line

.stabs "foo:T18=s4A:/217B:/217C:/217D:/217n:/217,0,32;;~;",128,0,0,0

is invalid.

The following patch seems to keep gdb happy.

*** dbxout.c.old	Mon Mar 13 16:14:31 1989
--- dbxout.c	Mon Mar 13 16:44:15 1989
***************
*** 431,435 ****
  	   of each field.  */
  	/* Omit here the nameless fields that are used to skip bits.  */
! 	if (DECL_NAME (tem) != 0)
  	  {
  	    /* Continue the line if necessary,
--- 433,438 ----
  	   of each field.  */
  	/* Omit here the nameless fields that are used to skip bits.  */
! 	/* Omit also CONST_DECL. */
! 	if (DECL_NAME (tem) != 0 && TREE_CODE (tem) != CONST_DECL)
  	  {
  	    /* Continue the line if necessary,
***************
*** 465,472 ****
  		    fprintf (asmfile, ",0,0;");
  		  }
- 	      }
- 	    else if (TREE_CODE (tem) == CONST_DECL)
- 	      {
- 		/* How do we do this?  */
  	      }
  	    else
--- 468,471 ----