X-Git-Url: http://git.openafs.org/?p=openafs.git;a=blobdiff_plain;f=CODING;h=6a1af056594f5e84c96fe2f9e7ecd2f81f18b2c9;hp=9b349131d4840d1b1c25b867a0b42eff0311bd3e;hb=e63c2570f9d95bee7c7a00dd578a6971c6e733b9;hpb=eff41a2e53acd2622d89003647ba711a8b5bc75c diff --git a/CODING b/CODING index 9b34913..6a1af05 100644 --- a/CODING +++ b/CODING @@ -188,3 +188,80 @@ change. One workflow to do this: 2) In your editor, delete the existing Change-ID line. Save and quit. 3) Run "git commit --amend", saving and quitting again. Git will run the commit hook and generate a new Change-ID for Gerrit. + +Warnings +======== + +OpenAFS Warning detection +------------------------- + +There's been a concerted effort over the last few years, by many developers, +to reduce the number of warnings in the OpenAFS tree. In an attempt to +prevent warnings from creeping back in, we now have the ability to break the +build when new warnings appear. + +This is only available for systems with gcc 4.2 or later or clang 3.2 or +later, and is disabled unless the --enable-checking option is supplied to +configure. Because we can't remove all of the warnings, we permit file by +file (and warning by warning) disabling of specific warnings. The +--enable-checking=all option prevents +this, and errors for any file containing a warning. + +Disabling warnings +------------------ + +If warnings are unavoidable in a particular part of the build, they may be +disabled in an number of ways. + +You can disable a single warning type in a particular file by using GCC +pragmas. If a warning can be disabled with a pragma, then the switch to use +will be listed in the error message you receive from the compiler. Pragmas +should be wrapped in IGNORE_SOME_GCC_WARNINGS, so that they aren't used +with non-gcc compilers, and can be disabled if desired. For example: + #ifdef IGNORE_SOME_GCC_WARNINGS + # pragma GCC diagnostic warning "-Wold-style-definition" + #endif + +It would appear that when built with -Werror, the llvm clang compiler will +still upgrade warnings that are suppresed in this way to errors. In this case, +the fix is to mark that warning as ignored, but only for clang. For example: + #ifdef IGNORE_SOME_GCC_WARNINGS + # ifdef __clang__ + # pragma GCC diagnostic ignored "-Wdeprecated-declarations" + # else + # pragma GCC diagnostic warning "-Wdeprecated-declarations" + # endif + #endif + +If a pragma isn't available for your particular warning, you will need to +disable all warnings for the file in question. You can do this by supplying +the autoconf macro @CFLAGS_NOERROR@ in the build options for the file. For +example: + lex.yy.o : lex.yy.c y.tab.c + ${CC} -c ${CFLAGS} @CFLAGS_NOERROR@ lex.yy.c + +If you add a new warning inhibition, please also add it to the list below. + +Inhibited warnings +------------------ + +afs/afs_syscall.c : old-style + : strict-proto + : all (ukernel) : syscall pointer issues +afsd/afsd_kernel.c : deprecated : daemon() marked as deprecated on Darwin +auth/ktc.c : all (ukernel) : call_syscall doesn't have a prototype +bozo/bosserver.c : deprecated : daemon() marked as deprecated on Darwin +bucoord/ubik_db_if.c : strict-proto : Ubik_Call +bucoord/commands.c : all : Ubik_Call + : signed vs unsigned for dates +butc/tcudbprocs.c : all : ubik_Call +external/heimdal/hcrypto/validate.c: all: statement with empty body +kauth/admin_tools.c : strict-proto : ubik_Call +kauth/authclient.c : strict-proto : ubik_Call nonsense +libadmin/kas/afs_kasAdmin.c: strict-proto : ubik_Call nonsense +libadmin/samples/rxstat_query_peer.c : all : util_RPCStatsStateGet types +libadmin/samples/rxstat_query_process.c : all : util_RPCStatsStateGet types +libadmin/test/client.c : all : util_RPCStatsStateGet types +ubik/ubikclient.c : strict-protos : ubik_Call +volser/vol-dump.c : format : afs_sfsize_t +