From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Andy Moreton Newsgroups: gmane.emacs.devel Subject: Re: New warnings on emacs-26 branch with gcc 8.2.0 Date: Sat, 11 Aug 2018 19:13:00 +0100 Message-ID: <86in4gixg3.fsf@gmail.com> References: <86a7q0ai2z.fsf@gmail.com> <6d36dc4c-1e14-b6c8-e2f0-911d08f759e1@cs.ucla.edu> <83in4os01j.fsf@gnu.org> <16f2754a-b40e-4bc4-f95a-9bada460d5a4@cs.ucla.edu> <83bma9mh3z.fsf@gnu.org> <86eff52njj.fsf@gmail.com> <83wosxkwfz.fsf@gnu.org> <864lg1rlp0.fsf@gmail.com> <83mutslt8f.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1534011116 4893 195.159.176.226 (11 Aug 2018 18:11:56 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sat, 11 Aug 2018 18:11:56 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (windows-nt) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat Aug 11 20:11:52 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1foYMd-00016R-SJ for ged-emacs-devel@m.gmane.org; Sat, 11 Aug 2018 20:11:47 +0200 Original-Received: from localhost ([::1]:32812 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1foYOi-0005xv-KB for ged-emacs-devel@m.gmane.org; Sat, 11 Aug 2018 14:13:56 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:55600) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1foYO6-0005xe-2y for emacs-devel@gnu.org; Sat, 11 Aug 2018 14:13:19 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1foYO2-00070j-Ra for emacs-devel@gnu.org; Sat, 11 Aug 2018 14:13:18 -0400 Original-Received: from [195.159.176.226] (port=50269 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1foYO2-00070B-Ik for emacs-devel@gnu.org; Sat, 11 Aug 2018 14:13:14 -0400 Original-Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1foYLp-0000HI-F8 for emacs-devel@gnu.org; Sat, 11 Aug 2018 20:10:57 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 70 Original-X-Complaints-To: usenet@blaine.gmane.org Cancel-Lock: sha1:LnacvMX9XZneJ7Nb/4TLWYmPKYs= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 195.159.176.226 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:228420 Archived-At: On Sat 11 Aug 2018, Eli Zaretskii wrote: >> From: Andy Moreton >> Date: Sat, 11 Aug 2018 16:02:03 +0100 >> >> On Sat 11 Aug 2018, Eli Zaretskii wrote: >> >> >> From: Andy Moreton >> >> Date: Sat, 11 Aug 2018 11:41:20 +0100 >> >> >> >> > OK, I've now done so. Andrew, please see if this fixes the original >> >> > problem with this warning. >> >> >> >> Yes, that ha removed that batch of warnings. >> > >> > Thanks for testing. >> > >> >> There are still other warnings: one from -Wformat-overflow and 78 from >> >> -Wcast-function-type. >> > >> > Can you show the warnings from -Wcast-function-type? >> >> Here are the warnings from commit ec6f588940e5, built with gcc 8.2.0. >> Mostly this seems to be GetProcAddress results, where it complains that >> FARPROC and the desired fuinction type don't match. The gcc manual says >> that casting via "void (*)(void)" can be used to pacify the warning. >> >> >> CC dynlib.o >> C:/emacs/git/emacs/emacs-26/src/dynlib.c: In function 'dynlib_addr': >> C:/emacs/git/emacs/emacs-26/src/dynlib.c:160:6: warning: cast between incompatible function types from 'FARPROC' {aka 'long long int (*)()'} to 'BOOL (*)(DWORD, const CHAR *, struct HINSTANCE__ **)' {aka 'int (*)(long unsigned int, const char *, struct HINSTANCE__ **)'} [-Wcast-function-type] >> (GetModuleHandleExA_Proc) GetProcAddress (hm_kernel32, >> ^ > > Does it help to take the GetProcAddress call in parentheses, like > this: > > s_pfn_Get_Module_HandleExA = > (GetModuleHandleExA_Proc) (GetProcAddress (hm_kernel32, > "GetModuleHandleExA")); Doesn't help - gcc still warns. > If this doesn't help, what about removing the cast entirely? Also still warns. This does work: s_pfn_Get_Module_HandleExA = (GetModuleHandleExA_Proc) (void (*)(void)) GetProcAddress (hm_kernel32, "GetModuleHandleExA"); This is sliughtly less ugly and also pacifies the warning: #define FN_PTR_CAST(fnptrtype, fnptr) \ ((fnptrtype) (void (*)(void)) (fnptr)) s_pfn_Get_Module_HandleExA = FN_PTR_CAST(GetModuleHandleExA_Proc, GetProcAddress (hm_kernel32, "GetModuleHandleExA")); > In any case, I think it's a GCC bug: it thinks we are type-casting the > function being called, which is GetProcAddress, whereas what we really > want to do is cast the _value_ the function returns. I disagree. GetProcAddress returns FARPROC, and GetModuleHandleExA_Proc has a different signature. It is valid to warn about this. AndyM