Bug#505042: FTBFS with GCC 4.4: #elif is missing defined()

Martin Michlmayr tbm at cyrius.com
Sat Nov 8 18:40:45 UTC 2008


Package: cyrus-sasl2
Version: 2.1.22.dfsg1-23
User: debian-gcc at lists.debian.org
Usertags: ftbfs-gcc-4.4
Tags: patch

Your package fails to build with the upcoming GCC 4.4.  Version 4.4
has not been released yet but I'm building with a snapshot in order
to find errors and give people an advance warning.

GCC 4.4 will introduce better checks in the preprocessor.  Your code
does something like:

 #ifdef A
 #elif B
 #endif

but the #elif is wrong: #elif requires a condition whereas you're
trying to test whether B is defined.  You therefore have to use:
 #elif defined(B)

You can reproduce this problem with gcc-snapshot from unstable.

> Automatic build of cyrus-sasl2_2.1.22.dfsg1-23 on em64t by sbuild/amd64 0.53
...
> digestmd5.c:2514: warning: pointer targets in passing argument 3 of 'text->cipher_init' differ in signedness
> digestmd5.c:2514: note: expected 'unsigned char *' but argument is of type 'char *'
> digestmd5.c:2718:15: error: #elif with no expression
> digestmd5.c: In function 'make_client_response':
> digestmd5.c:3010: warning: pointer targets in passing argument 3 of 'calculate_response' differ in signedness
> digestmd5.c:2851: note: expected 'unsigned char *' but argument is of type 'char *'
> digestmd5.c:3010: warning: pointer targets in passing argument 11 of 'calculate_response' differ in signedness
> digestmd5.c:2851: note: expected 'unsigned char *' but argument is of type 'char *'
> digestmd5.c:3034: warning: pointer targets in passing argument 6 of 'add_to_challenge' differ in signedness
> digestmd5.c:505: note: expected 'unsigned char *' but argument is of type 'char *'
> digestmd5.c:3145: warning: pointer targets in passing argument 2 of 'text->cipher_init' differ in signedness
> digestmd5.c:3145: note: expected 'unsigned char *' but argument is of type 'char *'
> digestmd5.c:3145: warning: pointer targets in passing argument 3 of 'text->cipher_init' differ in signedness
> digestmd5.c:3145: note: expected 'unsigned char *' but argument is of type 'char *'
> digestmd5.c: In function 'digestmd5_client_mech_step1':
> digestmd5.c:3732: warning: pointer targets in passing argument 2 of '_plug_strdup' differ in signedness
> plugin_common.h:147: note: expected 'const char *' but argument is of type 'unsigned char *'
> digestmd5.c:3735: warning: pointer targets in passing argument 2 of '_plug_strdup' differ in signedness
> plugin_common.h:147: note: expected 'const char *' but argument is of type 'unsigned char *'
> digestmd5.c:3703: warning: unused parameter 'serverin'
> digestmd5.c:3704: warning: unused parameter 'serverinlen'
> digestmd5.c: In function 'digestmd5_client_mech_step3':
> digestmd5.c:3838: warning: unused parameter 'prompt_need'
> digestmd5.c:3839: warning: unused parameter 'clientout'
> digestmd5.c:3840: warning: unused parameter 'clientoutlen'
> digestmd5.c: In function 'digestmd5_client_mech_step':
> digestmd5.c:4000: warning: pointer targets in assignment differ in signedness
> digestmd5.c:4037:15: error: #elif with no expression
> make[3]: *** [digestmd5.lo] Error 1
> make[3]: Leaving directory `/build/tbm/cyrus-sasl2-2.1.22.dfsg1/plugins'

--- plugins/digestmd5.c~	2008-11-08 18:28:21.000000000 +0000
+++ plugins/digestmd5.c	2008-11-08 18:28:50.000000000 +0000
@@ -2715,7 +2715,7 @@
 	"DIGEST-MD5",			/* mech_name */
 #ifdef WITH_RC4
 	128,				/* max_ssf */
-#elif WITH_DES
+#elif defined(WITH_DES)
 	112,
 #else 
 	1,
@@ -4034,7 +4034,7 @@
 	"DIGEST-MD5",
 #ifdef WITH_RC4				/* mech_name */
 	128,				/* max ssf */
-#elif WITH_DES
+#elif defined(WITH_DES)
 	112,
 #else
 	1,

-- 
Martin Michlmayr
http://www.cyrius.com/





More information about the Pkg-cyrus-sasl2-debian-devel mailing list