Subject: yacc generated files cause xstr problems (#241) Index: usr.bin/yacc 2.11BSD Description: Processing a .y file with yacc places the string: #ifndef lint static char yaccpar_sccsid[] = "@(#)yaccpar 4.1 (Berkeley) 2/11/83"; #endif not lint in the resulting y.tab.c file Using xstr(1) and cc on y.tab.c produces the error: foo.c:2: warning: illegal combination of pointer and integer, op = 2: Illegal initialization Repeat-By: Script started on Fri May 12 20:00:24 1995 # cat foo.c #ifndef lint static char yaccpar_sccsid[] = "@(#)yaccpar 4.1 (Berkeley) 2/11/83"; #endif not lint # cc -E foo.c | xstr -c - # cc -c x.c foo.c:2: warning: illegal combination of pointer and integer, op = 2: Illegal initialization # exit # script done on Fri May 12 20:00:51 1995 Fix: Apply the update below and reinstall yacc. Initially only the file 'yaccpar' (which gets installed in /usr/lib) was modified. I could not leave well enough alone however and ifdef'd out the sccsid strings from all of the modules. sccs id strings are not a good idea on a small machine especially in a program that is straining the address space limits. A final bit of tidying up was done by adding additional register declarations - the yacc text segment is approximately 450 bytes smaller now. save the patch below to a file, /tmp/241 patch -p0 < /tmp/241 cd /usr/src/usr.bin/yacc make make install make clean ===================cut here================== *** /usr/src/usr.bin/yacc/y1.c.old Mon Feb 16 16:21:07 1987 --- /usr/src/usr.bin/yacc/y1.c Thu May 11 22:36:17 1995 *************** *** 1,6 **** ! #ifndef lint ! static char sccsid[] = "@(#)y1.c 4.1 (Berkeley) 2/11/83"; ! #endif not lint # include "dextern" --- 1,6 ---- ! #if !defined(lint) && defined(DOSCCS) ! static char sccsid[] = "@(#)y1.c 4.1.1 (2.11BSD) 1995/05/11"; ! #endif # include "dextern" *************** *** 111,117 **** fclose( ftable ); } ! char *chcopy( p, q ) char *p, *q; { /* copies string q into p, returning next free char ptr */ while( *p = *q++ ) ++p; return( p ); --- 111,117 ---- fclose( ftable ); } ! char *chcopy( p, q ) register char *p, *q; { /* copies string q into p, returning next free char ptr */ while( *p = *q++ ) ++p; return( p ); *************** *** 119,127 **** # define ISIZE 400 char *writem(pp) int *pp; { /* creates output string for item pointed to by pp */ ! int i,*p; static char sarr[ISIZE]; ! char *q; for( p=pp; *p>0 ; ++p ) ; p = prdptr[-*p]; --- 119,127 ---- # define ISIZE 400 char *writem(pp) int *pp; { /* creates output string for item pointed to by pp */ ! register int i,*p; static char sarr[ISIZE]; ! register char *q; for( p=pp; *p>0 ; ++p ) ; p = prdptr[-*p]; *************** *** 145,151 **** } char *symnam(i){ /* return a pointer to the name of symbol i */ ! char *cp; cp = (i>=NTBASE) ? nontrst[i-NTBASE].name : tokset[i].name ; if( *cp == ' ' ) ++cp; --- 145,151 ---- } char *symnam(i){ /* return a pointer to the name of symbol i */ ! register char *cp; cp = (i>=NTBASE) ? nontrst[i-NTBASE].name : tokset[i].name ; if( *cp == ' ' ) ++cp; *************** *** 203,209 **** } aryfil( v, n, c ) int *v,n,c; { /* set elements 0 through n-1 to c */ ! int i; for( i=0; ilset; if( pp == 0 ) fprintf( foutput, "\tNULL"); else { *************** *** 236,242 **** cpres(){ /* compute an array with the beginnings of productions yielding given nonterminals The array pres points to these lists */ /* the array pyield has the lists: the total size is only NPROD+1 */ ! register **pmem; register c, j, i; static int * pyield[NPROD]; --- 237,243 ---- cpres(){ /* compute an array with the beginnings of productions yielding given nonterminals The array pres points to these lists */ /* the array pyield has the lists: the total size is only NPROD+1 */ ! int **pmem; register c, j, i; static int * pyield[NPROD]; *** /usr/src/usr.bin/yacc/y2.c.old Mon Feb 16 16:21:07 1987 --- /usr/src/usr.bin/yacc/y2.c Thu May 11 22:41:56 1995 *************** *** 1,6 **** ! #ifndef lint ! static char sccsid[] = "@(#)y2.c 4.1 (Berkeley) 2/11/83"; ! #endif not lint # include "dextern" # define IDENTIFIER 257 --- 1,6 ---- ! #if !defined(lint) && defined(DOSCCS) ! static char sccsid[] = "@(#)y2.c 4.1.1 (2.11BSD) 1995/05/11"; ! #endif # include "dextern" # define IDENTIFIER 257 *************** *** 67,73 **** setup(argc,argv) int argc; char *argv[]; ! { int i,j,lev,t, ty; int c; int *p; char actname[8]; --- 67,74 ---- setup(argc,argv) int argc; char *argv[]; ! { int i,lev, ty; ! register int t, j; int c; int *p; char actname[8]; *************** *** 628,633 **** --- 629,635 ---- fdtype( t ){ /* determine the type of a symbol */ register v; + if( t >= NTBASE ) v = nontrst[t-NTBASE].tvalue; else v = TYPE( toklev[t] ); if( v <= 0 ) error( "must specify type for %s", (t>=NTBASE)?nontrst[t-NTBASE].name: *************** *** 691,698 **** } cpycode(){ /* copies code between \{ and \} */ - int c; c = getc(finput); if( c == '\n' ) { c = getc(finput); --- 693,700 ---- } cpycode(){ /* copies code between \{ and \} */ + register int c; c = getc(finput); if( c == '\n' ) { c = getc(finput); *************** *** 714,720 **** } skipcom(){ /* skip over comments */ ! register c, i=0; /* i is the number of lines skipped */ /* skipcom is called after reading a / */ --- 716,722 ---- } skipcom(){ /* skip over comments */ ! register int c, i=0; /* i is the number of lines skipped */ /* skipcom is called after reading a / */ *************** *** 732,738 **** } cpyact(offset){ /* copy C action to the next ; or closing } */ ! int brac, c, match, j, s, tok; fprintf( faction, "\n# line %d \"%s\"\n", lineno, infile ); --- 734,741 ---- } cpyact(offset){ /* copy C action to the next ; or closing } */ ! register int c; ! int brac, match, j, s, tok; fprintf( faction, "\n# line %d \"%s\"\n", lineno, infile ); *** /usr/src/usr.bin/yacc/y3.c.old Mon Feb 16 16:21:07 1987 --- /usr/src/usr.bin/yacc/y3.c Thu May 11 22:50:20 1995 *************** *** 1,6 **** ! #ifndef lint ! static char sccsid[] = "@(#)y3.c 4.1 (Berkeley) 2/11/83"; ! #endif not lint # include "dextern" --- 1,6 ---- ! #if !defined(lint) && defined(DOSCCS) ! static char sccsid[] = "@(#)y3.c 4.1.1 (2.11BSD) 1995/05/11"; ! #endif # include "dextern" *************** *** 10,16 **** output(){ /* print the output for the states */ ! int i, k, c; register struct wset *u, *v; fprintf( ftable, "short yyexca[] ={\n" ); --- 10,17 ---- output(){ /* print the output for the states */ ! int i, k; ! register int c; register struct wset *u, *v; fprintf( ftable, "short yyexca[] ={\n" ); *************** *** 123,129 **** } go2out(){ /* output the gotos for the nontermninals */ ! int i, j, k, best, count, cbest, times; fprintf( ftemp, "$\n" ); /* mark begining of gotos */ --- 124,131 ---- } go2out(){ /* output the gotos for the nontermninals */ ! register int i, j, k; ! int best, count, cbest, times; fprintf( ftemp, "$\n" ); /* mark begining of gotos */ *************** *** 176,182 **** int g2debug = 0; go2gen(c){ /* output the gotos for nonterminal c */ ! int i, work, cc; struct item *p, *q; --- 178,185 ---- int g2debug = 0; go2gen(c){ /* output the gotos for nonterminal c */ ! register int i, cc; ! int work; struct item *p, *q; *************** *** 224,230 **** } } ! precftn(r,t,s){ /* decide a shift/reduce conflict by precedence. /* r is a rule number, t a token number */ /* the conflict is in state s */ /* temp1[t] is changed to reflect the action */ --- 227,234 ---- } } ! precftn(r,t,s) register int t; ! { /* decide a shift/reduce conflict by precedence. /* r is a rule number, t a token number */ /* the conflict is in state s */ /* temp1[t] is changed to reflect the action */ *************** *** 257,266 **** } } ! wract(i){ /* output state i */ /* temp1 has the actions, lastred the default */ int p, p0, p1; ! int ntimes, tred, count, j; int flag; /* find the best choice for lastred */ --- 261,271 ---- } } ! wract(i) register int i; { /* output state i */ /* temp1 has the actions, lastred the default */ int p, p0, p1; ! int ntimes, tred, count; ! register int j; int flag; /* find the best choice for lastred */ *** /usr/src/usr.bin/yacc/y4.c.old Mon Feb 16 16:21:07 1987 --- /usr/src/usr.bin/yacc/y4.c Thu May 11 22:51:45 1995 *************** *** 1,6 **** ! #ifndef lint ! static char sccsid[] = "@(#)y4.c 4.1 (Berkeley) 2/11/83"; ! #endif not lint # include "dextern" --- 1,6 ---- ! #if !defined(lint) && defined(DOSCCS) ! static char sccsid[] = "@(#)y4.c 4.1.1 (2.11BSD) 1995/05/11"; ! #endif # include "dextern" *** /usr/src/usr.bin/yacc/yaccpar.old Mon Feb 16 16:21:08 1987 --- /usr/src/usr.bin/yacc/yaccpar Thu May 11 22:23:08 1995 *************** *** 1,6 **** ! #ifndef lint static char yaccpar_sccsid[] = "@(#)yaccpar 4.1 (Berkeley) 2/11/83"; ! #endif not lint # # define YYFLAG -1000 --- 1,6 ---- ! #if !defined(lint) && defined(DOSCCS) static char yaccpar_sccsid[] = "@(#)yaccpar 4.1 (Berkeley) 2/11/83"; ! #endif # # define YYFLAG -1000 *** /VERSION.old Mon May 8 21:34:07 1995 --- /VERSION Fri May 12 19:49:50 1995 *************** *** 1,4 **** ! Current Patch Level: 240 2.11 BSD ============ --- 1,4 ---- ! Current Patch Level: 241 2.11 BSD ============