[PATCH] aic7xxx/aicasm build failure w/gcc-3.4.6

From: Bob Tracy
Date: Tue May 22 2007 - 07:51:43 EST


Second try: originally reported this back on April 17th. 2.6.X
kernel builds started failing after I upgraded my compiler from
gcc-3.3.X to gcc-3.4.6:

make -C drivers/scsi/aic7xxx/aicasm
(...)
gcc -I/usr/include -I. aicasm.c aicasm_symbol.c aicasm_gram.c aicasm_macro_gram.c aicasm_scan.c aicasm_macro_scan.c -o aicasm -ldb
aicasm_gram.y:1948: error: conflicting types for 'yyerror'
aicasm_gram.tab.c:3004: error: previous implicit declaration of 'yyerror' was here
aicasm_macro_gram.y:162: error: conflicting types for 'mmerror'
aicasm_macro_gram.tab.c:1196: error: previous implicit declaration of 'mmerror' was here

As a workaround, commenting out or deleting the "void" declarations
for yyerror() and mmerror() in the respective ".y" files fixes the
problem. A patch to illustrate the offending code is attached, but
there's no "signed-off by" line because I'm certain the final form of
the patch will be different. The patch applies cleanly to at least
2.6.21 and later kernels. gcc-3.3 may have been warning about the
type conflicts, but I didn't notice: gcc-3.4 treats the type conflicts
as errors, so I *did* notice :-).

Here's the "gcc -v" output:

Reading specs from /usr/lib/gcc/i486-slackware-linux/3.4.6/specs
Configured with: ../gcc-3.4.6/configure --prefix=/usr --enable-shared --enable-threads=posix --enable-__cxa_atexit --disable-checking --with-gnu-ld --verbose --target=i486-slackware-linux --host=i486-slackware-linux
Thread model: posix
gcc version 3.4.6

--
-----------------------------------------------------------------------
Bob Tracy WTO + WIPO = DMCA? http://www.anti-dmca.org
rct@xxxxxxxx
-----------------------------------------------------------------------
--- linux/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y.orig 2006-02-06 06:00:58.000000000 -0600
+++ linux/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y 2007-04-16 12:31:08.000000000 -0500
@@ -1943,7 +1943,7 @@
versions[newlen + oldlen + 1] = '\0';
}

-void
+/* void */
yyerror(const char *string)
{
stop(string, EX_DATAERR);
--- linux/drivers/scsi/aic7xxx/aicasm/aicasm_macro_gram.y.orig 2002-12-24 07:09:30.000000000 -0600
+++ linux/drivers/scsi/aic7xxx/aicasm/aicasm_macro_gram.y 2007-04-16 12:32:48.000000000 -0500
@@ -157,7 +157,7 @@
}
}

-void
+/* void */
mmerror(const char *string)
{
stop(string, EX_DATAERR);