GNU bug report logs - #78160
Emacs fail to build with GCC 15

Previous Next

Package: emacs;

Reported by: MAN ONE <pRoMMMModE <at> outlook.com>

Date: Wed, 30 Apr 2025 06:57:03 UTC

Severity: normal

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #8 received at 78160 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: MAN ONE <pRoMMMModE <at> outlook.com>
Cc: 78160 <at> debbugs.gnu.org
Subject: Re: bug#78160: Emacs fail to build with GCC 15
Date: Wed, 30 Apr 2025 11:15:26 +0300
> From: MAN ONE <pRoMMMModE <at> outlook.com>
> Date: Wed, 30 Apr 2025 04:38:42 +0000
> msip_labels: 
> 
> Earlier this week Msys2 upgraded GCC to version 15.1.0, which lead to this build error:
> 
> 
> emacsclient.c:1718:9: warning: no previous declaration for 'set_fg' [-Wmissing-variable-de
> clarations]
>  1718 | FARPROC set_fg;  /* Pointer to AllowSetForegroundWindow.  */
>       |         ^~~~~~
> emacsclient.c:1719:9: warning: no previous declaration for 'get_wc' [-Wmissing-variable-de
> clarations]
>  1719 | FARPROC get_wc;  /* Pointer to RealGetWindowClassA.  */
>       |         ^~~~~~
> emacsclient.c: In function 'w32_find_emacs_process':
> emacsclient.c:1759:9: error: too many arguments to function 'get_wc'; expected 0, have 3
>  1759 |   if (! get_wc (hWnd, class, sizeof (class))
>       |         ^~~~~~  ~~~~
> emacsclient.c:1770:3: error: too many arguments to function 'set_fg'; expected 0, have 1
>  1770 |   set_fg (emacs_pid);
>       |   ^~~~~~  ~~~~~~~~~
> emacsclient.c:1718:9: warning: no previous declaration for 'set_fg' [-Wmissing-variable-de
> clarations]
>  1718 | FARPROC set_fg;  /* Pointer to AllowSetForegroundWindow.  */
>       |         ^~~~~~
> emacsclient.c:1719:9: warning: no previous declaration for 'get_wc' [-Wmissing-variable-de
> clarations]
>  1719 | FARPROC get_wc;  /* Pointer to RealGetWindowClassA.  */
>       |         ^~~~~~
> emacsclient.c: In function 'w32_find_emacs_process':
> emacsclient.c:1759:9: error: too many arguments to function 'get_wc'; expected 0, have 3
>  1759 |   if (! get_wc (hWnd, class, sizeof (class))
>       |         ^~~~~~  ~~~~
> emacsclient.c:1770:3: error: too many arguments to function 'set_fg'; expected 0, have 1
>  1770 |   set_fg (emacs_pid);
>       |   ^~~~~~  ~~~~~~~~~
> make[2]: *** [Makefile:446: emacsclientw.exe] Error 1
> make[2]: *** Waiting for unfinished jobs....
> make[2]: *** [Makefile:439: emacsclient.exe] Error 1
> make[2]: Leaving directory '/e/home/repo/emacs/lib-src'
> make[1]: *** [Makefile:529: lib-src] Error 2
> make[1]: *** Waiting for unfinished jobs....
> 
> 
> I think the cause is GCC 15 now use C23 by default[1], and appending ` -std=gnu17 ` compiler flag does solve the problem.

Thanks for the report.  Does the patch below solve these problems?

diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index 2cf90f4..d783af9 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -1715,8 +1715,12 @@ set_socket (bool no_exit_if_error)
 }
 
 #ifdef HAVE_NTGUI
-FARPROC set_fg;  /* Pointer to AllowSetForegroundWindow.  */
-FARPROC get_wc;  /* Pointer to RealGetWindowClassA.  */
+typedef BOOL (WINAPI *AllowSetForegroundWindow_proc) (DWORD);
+/* Pointer to AllowSetForegroundWindow.  */
+static AllowSetForegroundWindow_proc set_fg;
+typedef UINT (WINAPI *RealGetWindowClassA_proc) (HWND, LPSTR, UINT);
+/* Pointer to RealGetWindowClassA.  */
+static RealGetWindowClassA_proc get_wc;
 
 void w32_set_user_model_id (void);
 
@@ -1794,8 +1798,8 @@ w32_give_focus (void)
      emacsclient can allow Emacs to grab the focus by calling the function
      AllowSetForegroundWindow.  Unfortunately, older Windows (W95, W98 and
      NT) lack this function, so we have to check its availability.  */
-  if ((set_fg = GetProcAddress (user32, "AllowSetForegroundWindow"))
-      && (get_wc = GetProcAddress (user32, "RealGetWindowClassA")))
+  if ((set_fg = (AllowSetForegroundWindow_proc) GetProcAddress (user32, "AllowSetForegroundWindow"))
+      && (get_wc = (RealGetWindowClassA_proc) GetProcAddress (user32, "RealGetWindowClassA")))
     EnumWindows (w32_find_emacs_process, (LPARAM) 0);
 }
 #endif /* HAVE_NTGUI */




This bug report was last modified 82 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.