[DRBD-user] 0.7 & gcc-2.9x bug
Lars Ellenberg
lars.ellenberg at linbit.com
Tue Jun 22 13:36:27 CEST 2004
On Mon, Jun 21, 2004 at 09:06:04PM +0200, Bernd Schubert wrote:
> Hello,
>
> When I just tried to compile 0.7-pre8 on a debian woody system, it failed:
>
> gcc-2.95 -c -Wall -I../drbd -c -o drbdsetup.o drbdsetup.c
> drbdsetup.c:1255: unterminated string or character constant
> drbdsetup.c:193: possible real start of unterminated constant
> make: *** [drbdsetup.o] Error 1
>
> However on my sid system it compiled fine, so I decided to investigate
> further. Somehow the PERROR macro is misinterpreted by the preprocessor.
>
> The appropriate line from 'gcc-3.3 -E -Wall -I../drbd drbdsetup.c' looks
> like this:
>
> do { fprintf(stderr,"can not resolv the hostname" ": "); perror(0); } while
> (0);
>
> Whereas the gcc-2.95 output has a missing quotation mark ("):
>
> do { fprintf(stderr , "can not resolv the hostname" ": ); perror(0); } while
> (0)
>
>
> Since the PERROR macro looks fine, I really believe that its a compiler bug.
>
> Here's an IMHO ugly workaround, but I have no other idea how to workaround it
> else:
>
> bernd at bathl user>diff -u drbdsetup.c drbdsetup.c.new
> --- drbdsetup.c 2004-06-18 14:47:37.000000000 +0200
> +++ drbdsetup.c.new 2004-06-21 20:44:11.000000000 +0200
> @@ -84,7 +84,7 @@
> #endif
>
> #define PERROR(fmt, args...) \
> -do { fprintf(stderr,fmt ": ", ##args); perror(0); } while (0)
> +do { fprintf(stderr,fmt ": " "", ##args); perror(0); } while (0)
try this:
#define PERROR(fmt, args...) \
do { fprintf(stderr,fmt ": " , ##args); perror(0); } while (0)
( note the additional blank ^ here...
lge
More information about the drbd-user
mailing list