Date: Tue, 7 Nov 2000 12:05:11 +0200 From: Giorgos Keramidas <keramida@ceid.upatras.gr> To: hackers@freebsd.org Subject: umask(2) and -Wconversion Message-ID: <20001107120511.A98074@gray.westgate.gr>
next in thread | raw e-mail | index | archive | help
While trying to compile libskey with various warnings enabled, I discovered the following funny thing about -Wconversion and umask(2), which caused libskey to fail to compile, because it compiles by default with -Werror which makes every warning fatal. I found that the warning is caused when a program that calls umask(2) is compiled with -Wconversion. The info page of gcc says about -Wconversion: `-Wconversion' Warn if a prototype causes a type conversion that is different from what would happen to the same argument in the absence of a prototype. This includes conversions of fixed point to floating and vice versa, and conversions changing the width or signedness of a fixed point argument except when the same as the default promotion. Also, warn if a negative integer constant expression is implicitly converted to an unsigned type. For example, warn about the assignment `x = -1' if `x' is unsigned. But do not warn about explicit casts like `(unsigned) -1'. The following test program when compiled with -Wconversion shown below will always give a warning, even if I explicitly try to cast the argument of umask() to mode_t. 1 #include <stdio.h> 2 #include <sys/stat.h> 3 4 int main (void) 5 { 6 mode_t oldmask; 7 8 oldmask = umask(0); 9 printf("The umask has changed\n"); 10 umask(oldmask); 11 return 0; 12 } The output given when I compile this with -Wconversion is: gray-charon:/home/charon/test% gcc -Wconversion test.c -o test test.c: In function `main': test.c:8: warning: passing arg 1 of `umask' with different width due to prototype test.c:10: warning: passing arg 1 of `umask' with different width due to prototype The problem is that even if I change line 8 to read: 8 oldmask = umask((mode_t) 0); the warning is still there. Am I being a bit too strict with all these warnings here? If not, does anyone else have any idea why umask(2) will always cause such a warning, and how I can go about correcting it? Casting obviously fails, so something else needs to be done. -- Giorgos Keramidas, <keramida@ceid.upatras.gr> For my public pgp2 key: finger -l keramida@diogenis.ceid.upatras.gr To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001107120511.A98074>